2010-10-04 124 views
1

我想爲消費者使用ThreadPool實現生產者 - 消費者模式。我將有1個生產者的請求和多個消費者來處理傳入的請求。當使用線程池實現消費者時,我的問題是,如果我仍然有我自己的隊列讓生產者將請求放在請求上,然後將它們傳遞給Cosumers ThreadPool,或者我應該讓生產者直接將它傳遞給ThreadPool隊列?線程池和生產者 - 消費者模式設計問題

我對最後一個問題的關注是可以將多少個任務傳遞給一個ThreadPool隊列,並且以何種速度進行?在將產品傳遞給消費者線程之前,生產者應該相當快地做一些「預處理」工作。

當我在生產者 - 消費者線程之間有一個隊列時,我沒有更多的控制嗎?

這是針對需要高性能且需要處理大量傳入客戶端請求的服務器應用程序。 (一次有數百個)。

任何意見是讚賞!

回答

1

生產者和線程池之間的隊列需要1或2個額外的上下文切換:線程池在空隊列上等待,然後需要調度到消費者線程。最後,消費者必須返回到線程池。調度和處理結束可以由消息類來管理。
所有消費者線程都在隊列中等待,其中一個偵聽器將消耗並停止偵聽,直到準備就緒。當所有消費者都忙碌時,第一個消費者準備就緒時將處理下一條消息。
所以前者具有更多的可預測的行爲和額外的上下文切換的代價。