- AperNet (v0.08)
- AperNet 是一个基于Reactor 模型的多线程 Web 服务器。支持处理 HTTP/1.1 静态 GET 请求。
- 高性能多线程模型:采用 Oneloop per thread 的线程模型,每一个线程都有一个 EventLoop。主线程负责分发事件(RoundRobin),每一个线程都有一个 EventPoll 来接受并处理时间。
- 防止内存泄漏:使用了智能指针管理对象周期。
- 异步事件的实现:采用的 bind()+function()+eventfd()来实现。
- 提高响应速度:使用了 non-blocking I/O+应用层 Buffer。
安装前,你需要确保你的机器已经正确配置了cmake 3.0以上的版本,你可在软件源中下载并安装cmake。
cd src
cmake .
./server
$ab ab -n 500000 -r -c 512 http://127.0.0.1:8000/hello.html
Concurrency Level: 512
Time taken for tests: 18.925 seconds
Complete requests: 500000
Failed requests: 0
Non-2xx responses: 500000
Requests per second: 26419.50 [#/sec] (mean)
Time per request: 0.038 [ms] (mean, across all concurrent requests)
Concurrency Level: 512
Time taken for tests: 22.413 seconds
Complete requests: 500000
Failed requests: 0
Non-2xx responses: 500000
Requests per second: 22308.63 [#/sec] (mean)
Time per request: 0.045 [ms] (mean, across all concurrent requests)
$webbench http://127.0.0.1:8000/ -2 --get -c 1000
Speed=2437418 pages/min, 6662243 bytes/sec.
Total time
代表函数的调用总时间(包括函数内的调用)
Self time
代表函数调用的时间(不包括其它函数)
按照selftime排序:
Total time Self time Calls Function
========== ========== ========== =================================================
2.055 m 1.030 m 3004 EPoller::poll
1.025 m 1.025 m 2987 epoll_wait
11.298 ms 11.298 ms 2000 write
6.444 ms 6.444 ms 167030 std::forward
按照totaltime排序:
Total time Self time Calls Function
========== ========== ========== =================================================
475.619 ms 2.053 ms 7499 std::function::operator ()
468.986 ms 1.909 ms 7499 std::_Bind::operator ()
464.056 ms 2.579 ms 7499 std::_Bind::__call
213.488 ms 618.605 us 2998 Channel::handleEvent
可以看到server主要的性能消耗在于I/O(write)和函数回调,符合预期。