首頁 > Java > java教程 > 項目 不依賴線程調度器

項目 不依賴線程調度器

Susan Sarandon
發布: 2025-01-17 06:07:10
原創
506 人瀏覽過

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() 和過多的優先權調整。 最好的方法是重組應用程式以保持可執行執行緒數量的平衡。


書中的範例:

Item  Não dependa do agendador de threads

以上是項目 不依賴線程調度器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板