我想使用针对消费者的ThreadPool实现生产者-消费者模式。我将有1个请求的生产者和多个处理传入请求的使用者。当使用线程池实现使用者时,我的问题是我是否仍然应该有自己的队列供生产者提出请求,然后将其传递给Cosumers ThreadPool,还是应该让生产者将其直接传递给ThreadPool队列?

我对最后一个问题的关注是,一个线程可以传递给ThreadPool队列多少个任务,速率是多少?生产者在将其传递给使用者线程之前应该相当快地完成一些“预处理”工作。

当生产者-使用者线程之间存在队列时,是否将没有更多控制权?

这是针对需要高性能且需要处理大量传入客户端请求的Server应用程序的。 (一次数百个)。

任何建议表示赞赏!

最佳答案

生产者和线程池之间的队列需要1或2个额外的上下文切换:线程池在空队列上等待,然后需要分派(dispatch)到使用者线程。最后,必须将使用者带回线程池。最终的调度和处理可以由消息类管理。
当所有使用者线程都在队列中等待时,其中一个侦听器将使用并停止侦听直到准备就绪。当所有使用者都忙时,当第一个使用者准备好时,将处理下一条消息。
因此,前者具有更多可预测的行为,但需要额外的上下文切换。

关于c++ - ThreadPool和Producer-消费者模式设计问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3855010/

10-12 20:40