与HTTP服务器共享TBB的线程池是一个好主意吗?

问题描述 投票:0回答:1

我知道这是一个奇怪的问题,但请听我说。我正在使用C ++处理高吞吐量,计算繁重的HTTP后端服务器。很简单:

  1. 启动HTTP服务器
  2. 接收一些请求
  3. 做很多数学
    • 此步骤使用TBB并行化
  4. 将结果发送回(大约20毫秒)
  5. 对响应多久没有限制。但是最坏的情况越少越好。

现在,我的瓶颈是服务器部分,它使用的线程池与TBB不同。因此,当TBB忙于做数学时。服务器可能突然收到数十个新请求,然后对服务器端的线程进行调度,并导致大量缓存未命中和分支预测失败。

我提出的解决方案是与服务器共享TBB的线程池。然后,TBB忙时将不会注册任何请求,TBB释放后立即处理。

这是个好主意吗?还是有潜在的问题?

multithreading performance httpserver tbb
1个回答
0
投票

这很难在不知道其他线程池正在做什么的情况下回答。如果它处理文件或网络I / O,则将其与CPU密集型池组合可能是一种悲观,因为I / O不会占用CPU。

通常应该有一个小的缓冲池,或者甚至可能有一个处理接受循环和异步I / O的线程,将新请求交给工作池进行处理并将结果发送回网络。

[避免将CPU密集型工作与I / O工作混在一起,因为这会使资源利用率难以管理。话虽这么说,有时它更容易,而且无论如何都无法在100%CPU上运行。因此,是的,您应该尝试仅使用一个池。但是在更改之前/之后测量性能。

© www.soinside.com 2019 - 2024. All rights reserved.