多線程高效合做之master-warker模式

對於高併發的任務,有些任務是相互獨立的,任務與任務之間沒有依賴關係,所以能夠採用 master - worker 模式。安全

master 用於接受任務和分發任務給 worker,並將 worker 返回的結果組裝返回給調用方。所以該模式是異步的。併發

要用到組件有:任務隊列、任務和worker線程映射、任務和結果集映射異步

private ConcurrentLinkedQueue<Task> taskQueue = new ConcurrentLinkedQueue<>();
    private HashMap<String, Runnable> taskThreadMap = new HashMap<>();
    private ConcurrentHashMap<String, Result> taskResultMap = new ConcurrentHashMap<>();

 

對於任務隊列,master 用於接受任務, worker 線程從任務集中取任務,涉及到多 worker 線程操做同一任務集,所以須要使用線程安全的集合 ConcurrentLinkedQueue。高併發

任務和worker線程映射 用於限制 worker 線程數量,在 master 中控制。由於只有一個 master 線程,所以不須要使用線程安全的集合類。spa

任務和結果集映射 用於 worker 將結果返回給 master 線程。涉及到多個 worker 線程,所以須要使用線程安全的 ConcurrentHashMap 保存任務和結果的映射。線程

相關文章
相關標籤/搜索