我正在为一个网络产品开发一个后端,它服务于十几个客户(N
= 10-100)。每个连接需要 2 个周期性任务,即心跳和通过 SSH 下载遥测数据,每个任务的频率为H
Hz。还有来自前端的不同类型的额外事件。根据每个任务的性质,每个连接的套接字上都有一个等待调用的可靠部分select
,这允许操作系统在等待响应时经常在线程之间切换以服务其他客户端。
在我的初始实现中,我为每个连接创建 3 个线程(心跳、遥测、额外),每个线程等待一个条件变量,每次在工作队列中有事情要做时都会被戳。工作队列使用计时器和来自前端的命令填充上述周期性事件。
我在这里有几个问题。
将工作线程池方法切换到英特尔 TBB 任务是否是个好主意?如果是这样,我需要初始化哪个线程值
tbb::task_scheduler_init
?在当前有 300 个线程等待条件变量(每秒
signal
ed次)的方法中,它很可能成为可伸缩性的瓶颈(尤其是在调用 的一侧)。有没有更好的方法让每个任务只唤醒一个工人?N * H * 3
signal
如何在 TBB 中实现工作线程的唤醒?
感谢您的建议!