myReactorServer: A High Performance C++ Web Server
项目地址
性能评估结果
身为一个Web Server,最重要的当然还是性能表现。所以不废话,先上性能评估结果。
由于这个项目借鉴了muduo项目的架构,所以性能对比的对象主要就是muduo。
测试环境
- OS: Ubuntu 14.04
- 内存: 8G
- CPU: I7-4930K
评估工具
评估方法
评估结果
测试截图放在后面。
| 服务器 | 短连接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()等)
原文地址:https://www.cnblogs.com/ChyauAng/p/9717507.html
时间: 2024-11-02 23:24:57