myReactorServer: 基于事件驱动的C++高性能服务器

发布日期:2019-06-16

myReactorServer: A High Performance C++ Web Server


项目地址

myReactorServer

性能评估结果

  身为一个Web Server,最重要的当然还是性能表现。所以不废话,先上性能评估结果。  由于这个项目借鉴了muduo项目的架构,所以性能对比的对象主要就是muduo。

测试环境

OS: Ubuntu 14.04内存: 8GCPU: I7-4930K

评估工具

WebBench

评估方法

评估结果

  测试截图放在后面。

| 服务器 | 短连接QPS | 长连接QPS || myReactorServer | 66117 | 13802326 || muduo | 44529 | 1623832 |

评估结果截图

myReactorServer短连接

muduo短连接

myReactorServer长连接

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()等)