Ale*_*ack 26 c++ linux multithreading scalability boost-asio
我用C++开发了一个迷你HTTP服务器,使用boost :: asio,现在我用多个客户端加载测试它,我一直无法接近饱和CPU.我正在测试一个Amazon EC2实例,大约50%使用一个cpu,20%使用另一个cpu,其余两个闲置(根据htop).
细节:
那么,我应该怎样看待改善这一结果呢?鉴于CPU大部分处于空闲状态,我希望利用这些额外的容量来获得更高的吞吐量,比如800请求/秒等等.
我有过的想法:
cme*_*erw 44
提高:: ASIO是不是线程友好,你会希望 - 周围有升压/ ASIO /细节/ epoll的该代码epoll_reactor.hpp这意味着只有一个线程可以同时调用内核的系统调用epoll的大锁.对于非常小的请求,这会产生重大影响(意味着您只会看到大致单线程的性能).
请注意,这是对boost :: asio如何使用Linux内核工具的限制,而不一定是Linux内核本身.epoll系统调用在使用边缘触发事件时确实支持多个线程,但正确(没有过多锁定)可能非常棘手.
顺便说一句,我一直在这方面做一些工作(将全多线程边缘触发的epoll事件循环与用户调度的线程/光纤相结合),并在nginetd项目下提供了一些代码.
Mar*_*rkR 11
当您使用EC2时,所有投注均已关闭.
尝试使用真实的硬件,然后你就可以看到发生了什么.尝试在VM中进行性能测试基本上是不可能的.
我还没有弄清楚EC2有用的东西,如果有人发现,请告诉我.
| 归档时间: |
|
| 查看次数: |
12579 次 |
| 最近记录: |