1。執行緒調度器的作用
執行緒調度程序決定哪些執行緒可以運行以及運行多長時間。 不同作業系統的擴展策略有所不同。 重要的是不要依賴調度程序的行為來保證程式的正確性或效能,因為這會損害可移植性。
2。魯棒程式的策略:執行緒平衡
要建立健全的程序,請將可執行執行緒的數量保持在接近可用處理器的數量。這可以避免調度程序過載並確保一致的行為。 儘管執行緒總數可能更高,但等待(不可運行)執行緒不會顯著影響系統負載。
3。管理執行緒的技術:避免主動等待與擴充
避免熱等待,其中執行緒不斷檢查共享資源的狀態。 這會不必要地消耗處理器資源。 透過正確調整執行緒池的大小(如在執行程式框架中)並創建適當大小的任務來減少可執行執行緒的數量 - 不能太小而導致開銷佔上風,也不能太大以致妨礙並行性。
4。不良做法範例:積極希望
下面的程式碼示範了主動等待:
<code class="language-java">public class SlowCountDownLatch { private int count; public SlowCountDownLatch(int count) { this.count = count; } public void await() { while (count > 0) { // Espera-ativa: desperdício de recursos do processador } } public void countDown() { if (count > 0) { count--; } } }</code>
此程式碼消耗過多資源。 解決方案是使用 CountDownLatch
,它使用高效的阻塞機制。
5。避免Thread.yield()
Thread.yield()
方法在不同的JVM實作之間不一致,並且沒有為並發問題提供健壯或可移植的解決方案。 不要使用 Thread.yield()
,而是重構程式碼以減少執行執行緒的數量。
錯誤範例:
<code class="language-java">while (!condition) { Thread.yield(); // Incorreto: uso de Thread.yield() }</code>
6。執行緒優先權調整
調整執行緒優先權也不是很可移植,在作業系統和 JVM 之間有所不同。 它的使用必須僅限於特定場景,在這些場景中,服務品質的提高證明了可移植性的損失是合理的,而不是作為結構性問題的解決方案。
7。結論
不要依賴調度程序來修正或最佳化程式的效能。避免使用 Thread.yield()
和過多的優先權調整。 最好的方法是重組應用程式以保持可執行執行緒數量的平衡。
書中的範例:
以上是項目 不依賴線程調度器的詳細內容。更多資訊請關注PHP中文網其他相關文章!