myReactorServer: 基於事件驅動的C++高性能服務器

myReactorServer: A High Performance C++ Web Server


項目地址


性能評估結果

  身爲一個Web Server,最重要的固然仍是性能表現。因此不廢話,先上性能評估結果。
  因爲這個項目借鑑了muduo項目的架構,因此性能對比的對象主要就是muduo。react

測試環境

  • OS: Ubuntu 14.04
  • 內存: 8G
  • CPU: I7-4930K

評估工具

評估方法

評估結果

  測試截圖放在後面。git

| 服務器 | 短鏈接QPS | 長鏈接QPS |
| myReactorServer | 66117 | 13802326 |
| muduo | 44529 | 1623832 |

評估結果截圖

myReactorServer短鏈接
myReactorServer短鏈接github

muduo短鏈接
muduo短鏈接web

myReactorServer長鏈接
myRaectorServer長鏈接服務器

muduo長鏈接
muduo長鏈接多線程


myReactorServer特性介紹

  • 事件驅動架構(one event loop per thread) + 線程池
  • master EventLoop線程 + I/O worker EventLoop線程 + 四緩衝異步日誌線程。單進程多線程設計,提高併發性。發揮多核性能,下降延遲架構

  • 內存分配
    • 對資源使用預分配策略,進行池化處理,設計鏈接池(借鑑Nginx鏈接池設計),避免因頻繁內存分配、對象構造影響性能
  • 數據拷貝
    • Buffer的特別設計,借鑑Redis的SDS字符串設計,使用Buffer chain,並對其使用scatter I/O,減小系統調用(read(), size(), realloc()等)次數
    • 使用C++ 11的移動語義,減小拷貝
    • 使用epoll LT,較selet與poll減小一次由用戶空間向內核空間的拷貝
  • 上下文切換
    • 分工明確的多線程設計 + EventLoop::runInLoop() + EventLoop::queueInLoop()避免線程上下文切換開銷
  • 鎖競爭
    • 經過邏輯與設計(master + workers + others線程)減小鎖的使用,且僅使用NPTL的互斥鎖mutex
    • 對於須要磁盤寫入的日誌線程,採起異步形式,減小對計算及I/O線程的影響
    • 使用Copy-on-Write等手法儘量的縮小臨界區(EventLoop::doPendingFunctors()等)
相關文章
相關標籤/搜索