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

myReactorServer: A High Performance C++ Web Server 项目地址 myReactorServer 性能评估结果 身为一个Web Server,最重要的当然还是性能表现。所以不废话,先上性能评估结果。 由于这个项目借鉴了muduo项目的架构,所以性能对比的对象主要就是muduo。 测试环境 OS: Ubuntu 14.04 内存: 8G CPU: I7-4930K 评估工具 WebBench 评估方法 评估结果 测试截图放在后面。 | 服务器 | 短连接QPS | 长连接QPS | | myReactorServer | 66117 | 13802326 | | muduo | 44529 | 1623832 | 评估结果截图 myReactorServer短连接 myReactorServer短连接 muduo短连接 muduo短连接 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()等)https://www.cnblogs.com/ChyauAng/p/9717507.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信