2010-10-04 182 views
1

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

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

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

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

任何意见是赞赏!

回答

1

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