我知道这是一个奇怪的问题,但请听我说。我正在使用C ++处理高吞吐量,计算繁重的HTTP后端服务器。很简单:
现在,我的瓶颈是服务器部分,它使用的线程池与TBB不同。因此,当TBB忙于做数学时。服务器可能突然收到数十个新请求,然后对服务器端的线程进行调度,并导致大量缓存未命中和分支预测失败。
我提出的解决方案是与服务器共享TBB的线程池。然后,TBB忙时将不会注册任何请求,TBB释放后立即处理。
这是个好主意吗?还是有潜在的问题?
这很难在不知道其他线程池正在做什么的情况下回答。如果它处理文件或网络I / O,则将其与CPU密集型池组合可能是一种悲观,因为I / O不会占用CPU。
通常应该有一个小的缓冲池,或者甚至可能有一个处理接受循环和异步I / O的线程,将新请求交给工作池进行处理并将结果发送回网络。
[避免将CPU密集型工作与I / O工作混在一起,因为这会使资源利用率难以管理。话虽这么说,有时它更容易,而且无论如何都无法在100%CPU上运行。因此,是的,您应该尝试仅使用一个池。但是在更改之前/之后测量性能。