我有一个多线程应用程序。每个模块在单独的线程中执行。
模块是:
- network module - used to receive/send data from network
- parser module - encode/decode network data to internal presentation
- 2 application module - perform some application logic on the above data one after other
- counter module - used to gather statistics from other modules
- timer module - used to schedule timers
- and much more ...
所有使用消息队列进行线程间通信的线程(通过条件变量和互斥量进行std::deque同步)。
一些模块被其他模块使用(例如,所有模块都使用计时器和计数器),并且对于从网络到来的每条消息,应该以非常高的速率处理。
这是非常复杂的应用程序,设计看起来“合理”。另一方面,我不确定这种设计(每个模块的线程数)是“最佳”的吗?特别是,恐怕这样的设计会“占用”许多上下文切换。
你怎么看?
有什么好的指南或开放源代码项目可以学习如何对线程应用程序进行“正确的”设计吗?
最佳答案
每个函数的线程设计只是幼稚的:它们假定通过将任务(按模块)分离到线程上,可以实现某种可伸缩性。
这种设计效率低下,因为很少有任务分解会产生与CPU一样多的任务。
更合理的设计是将任务分解为“作业”,然后使用线程池机制分配这些作业。
优于每个模块线程方法: