Java 多執行緒設計模式Master-Slave
阿新 • • 發佈:2019-02-12
為了避免Slave 執行緒佔用過多的資源,我們主要採取了兩個措施。一個是,Master 類所建立的Slave 執行緒數量為JVM 所在主機的CPU 個數(通過Runtime.getRuntime().availableProcessor()獲取); 另一個是Slave 執行緒的doRun() 方法每處理完10萬條記錄就會休眠80ms,這是為了避免其使得CPU 過於繁忙。
Master-Slave 模式的應用場景包括:
1. 平行計算(Parallel Computation)
2. 容錯計算(Fault Tolerance)
3. 計算精度 (Computational Accuracy)
使用Master-Slave 模式能夠帶來以下幾點好處:
1. 可交換性(Exchangeability) 和 可擴充套件性(Extensibility)
2. 提升計算效能
12.4.1 子任務的處理結果的收集
Master 收集子任務的處理結果通常有兩種方法。
1. 使用儲存倉庫(Repository),即master 參與者和Slave 都能訪問的資料結構,如ConcurrentMap)
2. 使用Promise 模式。如Slave 返回Master 一個 java.util.concurrent.Future 是來,Master 呼叫返回值的get() 方法獲取子任務處理的結果。這種方法還有一個好處就是Master 可以輕鬆捕捉到Slave 的異常,如果get() 方法丟擲異常則說明相應的子任務處理失敗。