libevent源码学习-----Reactor模型
生活随笔
收集整理的這篇文章主要介紹了
libevent源码学习-----Reactor模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
libevent內部采用了reactor模型
所謂reactor模型,其實就是一套事件注冊機制,用來解決單線程的阻塞問題。reactor核心思想是將事件和相應事件發生時想要調用的函數都記錄下來,在事件驅動循環開始后進行統一監測,當某個事件發生,會直接調用相應事件的處理函數。
比如說有事件event1,event2,event3。相應事件發生時想要調用的回調函數是cb1,cb2,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模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习笔记-----二分法之寻找非减
- 下一篇: libevent源码学习-----事件驱