1. 程式人生 > >boost::asio linux下的實現

boost::asio linux下的實現

  看了下boost的原始碼, Windows下完全就是用IOCP來實現的非同步,非常簡潔,因為Windows為IOCP做的事情太多了,包括建立完成事件佇列,往完成佇列裡面新增事件等等,根本不需要額外增加其他的程式碼就可以完成所有的事情。

  而在linux下就沒有這麼方便,第一linux下的epoll是reactor模型,系統只是做簡單的通知,其他拿資料的操作,還是需要自己動手,而且也不清楚是否有介面可以向epoll的佇列中新增其他的事件(像Windows中的PostQueuedCompletionStatus)。 

  所以boost又在epoll上面加了一層,相當於自己建立了一個完成事件佇列,當epoll來事件通知後boost去把資料copy到使用者的buffer中,然後再把完成事件push到佇列中,讓使用者執行緒去處理,這樣就實現了跟IOCP相同的proactor模型。