我正在編寫一個多線程C++應用程序。當線程A執行的計算開銷很大時,它會減慢線程B,C和D.如何防止這種情況發生?C++多線程執行速度減慢
回答
很難說沒有看到代碼,所以我只能給你建議降低線程A的優先級。這可以使用SetThreadPriority函數完成。
請注意,您可以設置線程優先級(SetThreadPriority
)
另外,我建議BackgroundWorker的挑選它從隊列中的工作。那麼隊列可以作爲一種方法來節流算了一筆賬:
- 可以配置多少「任務」是從隊列進行處理採取一舉
- 可以鎖定隊列(使用信號燈+條件事件),因此您可以暫時阻止拾取新任務。
- 您現在可以分發跨多個作業者的負擔(比如如果線程B,C,d是暫時閒置的,他們可以開始解除勞動關閉線程A;在一個四核+桌面非常有用)
$ 0.02
增加了更多的建議 – sehe 2011-04-13 14:56:06
有幾種方法:
- 作爲RedX建議,在線程A的內部循環添加
Sleep(0)
有它產生的時間更頻繁。這是便宜和懶惰的解決方案。 - 更好的辦法是改變線程的優先級。當您撥打
CreateThread
時,請通過CREATE_SUSPENDED
,以便線程不會立即啓動。然後致電SetPriorityClass
將線程設置爲較低的優先級,然後是ResumeThread
。
優先級較低時也會被其他系統進程中斷。通過睡眠(0),您仍然可以爲您的所有線程設置高優先級,並使用Sleep將剩下的時間用於這些線程。 (希望這是有道理的) – RedX 2011-04-13 15:04:00
@RedX,你的評論是錯誤的。當你睡眠(0)時,當前正在執行的線程被掛起,但是絕對不能保證下一個要運行的線程來自你的進程。所以你可能會以任何方式讓系統線程產生時間。 – 2011-04-13 15:06:55
您可能還想看看讓您的計算綁定線程將處理器交給其他線程。請參閱this post以瞭解執行此操作的各種方法。
- 1. 多線程減慢程序的速度
- 2. dotfuscator減慢執行速度?
- 3. 如何減慢執行速度?
- 4. 減慢javascript的評估執行速度
- 5. 添加System.out.println()會減慢執行速度(很多)?
- 6. C++線程應用程序比非線程運行速度慢
- 7. 多線程程序運行速度慢於單線程
- 8. 多線程減慢整體字典訪問速度?
- 9. 創建有很多線程對象的速度減慢
- 10. Mergesort執行速度很慢
- 11. HTMLUnit:執行速度超慢?
- 12. Matlab執行速度太慢
- 13. SqlClient.SqlDataAdapter.Update()執行速度很慢
- 14. SWT TextBox寫入速度比C++可執行文件打印速度慢得多
- 15. 使用多線程時程序運行速度較慢
- 16. 頭文件減慢程序的速度
- 17. 在PHP中減慢程序的速度
- 18. 慢速queryAggreate Aerospike多線程
- 19. 批減慢.mov速度
- 20. Servlet:response.setContentLength()減慢下載速度
- 21. 減慢鼠標速度
- 22. GridSeachCV優化速度減慢
- 23. parfor減慢計算速度
- 24. jQuery拖放速度減慢
- 25. XML解析速度減慢
- 26. 減慢模擬器速度
- 27. tsql合併速度減慢
- 28. SubversionNotify.exe減慢顛覆速度
- 29. ISNULL減慢查詢速度
- 30. 執行的java代碼的日誌行數......不會減慢執行速度嗎?
你的系統有多少核心?如果你的內核少於4個,那麼一些內核將不得不在多個線程中共享,這意味着一個線程的成本會影響其他線程...... – 2011-04-13 14:58:16
我有4個內核。這是一個英特爾i7。 – rossb83 2011-04-13 15:04:56
4核心和一個線程減慢其他?要麼你測量不正確或者線程在邏輯上相互鎖定(也就是說,這不是計算時間減慢)。因此,「睡眠」可能無濟於事。 – 2011-04-13 15:47:08