Mudo C++網路庫第八章學習筆記

self發表於2018-10-24

muduo網路庫的設計與實現

  • muduo是基於Reactor模式的C++網路庫;

Reactor的關鍵結構

  • Reactor最核心的是事件分發機制, 即將IO multiplexing拿到IO事件分發給各個檔案描述符(fd)的事件處理函式;
  • 每個Channel物件自始至終只負責一個檔案描述符(fd)的IO事件分發, 但它並不擁有這個fd, 也不會在析構的時候關閉這個fd;

TimerQueue定時器

  • 用timerfd給EventLoop加上定時器功能(和處理IO事件相同的方式來處理定時), 這樣的程式碼一致性更好;

TCP No Delay 和 TCP keepalive

  • TCP No Delay 和 TCP keepalive都是常用的TCP選項, 前者的作用是禁用Nagle演算法, 避免連續發包出現延遲, 這對編寫低延遲網路服務很重要;
    • TCP keepalive的作用是定期檢查TCP連線是否還存在;
    • 如果有應用層心跳的話, TCP keepalive不是必需的;

高水位回撥和低水位回撥

  • muduo使用HighWaterMarkCallback和WriteComleteCallback;
  • muduo庫的event loop pool由EventLoopThreadPool類表示;
  • muduo庫的TcpClient具備TcpConnection斷開之後重新連線的功能, 加上Connector具有反覆嘗試連線的功能, 因此客戶端和伺服器的啟動順序無關緊要;

epoll

  • epoll是Linux獨有的高效的IO multiplexing機制, 它與poll的不同是:
    • poll每次返回整個檔案描述符陣列, 使用者要遍歷陣列以找到那些檔案描述符上有IO事件;
    • 而epoll_wait返回的是活動fd的列表, 需要遍歷的陣列通常會小得多;
    • 在併發連線數較大而活躍連線比例不高時, epoll比poll更高效;

相關文章