1

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

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

当我在生产者 - 消费者线程之间有一个队列时,我会没有更多的控制权吗?

这适用于需要高性能并且需要处理大量传入客户端请求的服务器应用程序。(一次数百个)。

任何建议表示赞赏!

4

1 回答 1

1

生产者和线程池之间的队列需要 1 或 2 次额外的上下文切换:线程池等待空队列,然后需要分派给消费者线程。最后,必须将消费者呈现回线程池。调度和处理结束可以由消息类管理。
由于所有消费者线程都在队列上等待,其中一个侦听器将消费并停止侦听,直到准备好。当所有消费者都忙时,将在第一个消费者准备好时处理下一条消息。
所以前者的行为更可预测,但需要额外的上下文切换。

于 2010-10-04T12:18:24.443 回答