日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libevent源码学习-----Reactor模型

發布時間:2024/4/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libevent源码学习-----Reactor模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

libevent內部采用了reactor模型
所謂reactor模型,其實就是一套事件注冊機制,用來解決單線程的阻塞問題。reactor核心思想是將事件和相應事件發生時想要調用的函數都記錄下來,在事件驅動循環開始后進行統一監測,當某個事件發生,會直接調用相應事件的處理函數。
比如說有事件event1,event2,event3。相應事件發生時想要調用的回調函數是cb1,cb2,cb3。然而如果是順序判斷每個事件的發生時,會是這樣

阻塞等待event1發生 執行cb1 阻塞等待event2發生 執行cb2 阻塞等待event3發生 執行cb3

然而如果在等待event1發生時event2發生了,因為此時event1仍然沒有發生,所以會阻塞在等待event1的位置,導致event2發生了卻沒有調用event2的回調函數

reactor正是解決這種問題的模型,先將event1和cb1,event2和cb2,event3和cb3注冊到事件驅動上,reactor負責以非阻塞的方式等待注冊事件的發生,當某(些)個事件發生時,reactor主動調用相應的回調函數

注冊event1和cb1到reactor中 注冊event2和cb2到reactor中 注冊event3和cb3到reactor中reactor以阻塞的方式判斷有什么事件發生,比如調用io復用函數 對檢測到發生的事件調用對應的回調函數

與Reactor相對應的有一個Proactor模型,它才是真正意義上的異步,而Reactor只能稱為同步
二者不同之處在于

  • Reactor需要由應用程序本身調用回調函數,在這個時候僅僅是一個一個回調函數的調用,即同步調用,如果某個回調函數執行時間過長,會影響后面的函數調用
  • Proactor不需要應用程序調用,而是交給內核執行回調函數,當內核執行完后將結果返回給應用程序,所以不會出現Reactor的問題

總結

以上是生活随笔為你收集整理的libevent源码学习-----Reactor模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。