回答
沒有意義。你不需要更多的線程來做更多的工作。只需創建幾個線程,而不是一次可以有用地完成的事情數量,然後將其保留。
所以你建議如果我在高峯負載中得到100個併發請求,我應該在程序初始化時產生至少100個線程。但是如果我的平均負載是10個併發請求呢?不會是100個線程看起來像資源濫用? – deepdive 2013-05-07 07:28:00
@DivyangPatel:不,每個CPU產生一個線程,再加上一些線程,以防某些線程由於某種原因而阻塞。 CPU的數量決定了你可以一次做有用的事情的數量。希望你的線程池已經爲你處理。 – 2013-05-07 07:41:08
@大衛這是非常有用的線索。但是,你有沒有任何有用的分析或鏈接可以提供一個矩陣,它可以顯示請求數,每個請求的工作量和產生的線程數之間的關係。那挺棒的。在此先感謝 – deepdive 2013-05-07 08:27:02
處理線程池的一種簡單方法是擁有一個線程向量,並且每個線程都有一個隊列std::function
對象。線程只是從隊列中彈出一個函數,然後執行它。
您不必在創建線程池時創建/產生線程,因爲它們已經在運行。雖然線程沒有做任何工作,但他們要麼等待一個信號,告訴它隊列中有函數,要麼輪詢中間的睡眠隊列。
這就是我正在使用我的線程池。請參閱David Schwartz關於資源濫用空閒線程的回答。 – deepdive 2013-05-07 07:32:02
@DivyangPatel如果您使用某種信號而不是輪詢(例如['std :: condition_variable'](http://en.cppreference.com/w/cpp/thread/condition_variable)),那麼資源使用率爲最小的。首先線程不會使用任何CPU週期,其次睡眠線程使用的內存可以忽略不計。 – 2013-05-07 07:40:06
是的,我正在使用condition_variable將請求項目的隊列發送到線程池。 – deepdive 2013-05-07 08:23:58
- 1. 動態負載處理在wso2 esb
- 2. 動態生成onclick不處理IE7
- 3. 處理Zend_Form動態生成的元素
- 4. php處理動態生成的表單
- 5. 如何取消完成處理程序?
- 6. 我可以處理動態生成的控件
- 7. 如何處理完成處理程序塊中取消的NSURLSessionTask?
- 8. 處理動態(用戶生成的)數據模型的不同方法
- 9. MPI - 如何處理不能被線程數量整除的動態工作負載?
- 10. 負載信息動態地Symfony2的表單生成
- 11. 附加單擊處理程序,以動態生成的定位標記
- 12. 動態添加事件處理程序到href也是動態生成的
- 13. 用事件處理程序動態加載用戶控件 - 取消註冊
- 14. 動態生成 - 多線圖
- 15. 可以取消的線程
- 16. Java的Web應用程序 - 它可以處理負載?
- 17. 如何將負載處理程序附加到動態創建的項目
- 18. C#不能動態生成這個簡單的事件處理程序
- 19. 處理不同的狀態
- 20. MEF過程的動態負載定義
- 21. 獲取主線程的消息隊列和處理程序
- 22. 取消信號處理程序中的線程
- 23. LinFu動態代理生成
- 24. IIS高處理負載
- 25. irp處理和windows消息生成
- 26. 異步負載生成
- 27. 動態添加jQuery的事件處理程序以動態HTML
- 28. 取消形式負載
- 29. 消息驅動Bean可以同步處理JMS消息嗎?
- 30. 如何處理使用Web驅動程序動態生成值的表?
線程池的重點在於你不會「動態地產生/取消線程」 – 2013-05-07 07:23:15
根本不這樣做是一個好策略。 – 2013-05-07 07:23:44
@MitchWheat請在David Schwartz的回答中看到我的評論。即使我使用線程池,它不是一個合法的原因嗎? – deepdive 2013-05-07 07:29:44