對集合進行並行計算方法選擇的建議:stream的並行流,CompletableFuture

對於集合的並行計算,我們是要使用流(stream)還是CompletableFuture?


如果進行的是計算密集型的操作,並且沒有I/O,那麼推薦Stream接口,因爲實現簡單,同時效率也是最高的(如果所         有的線程都是計算密集型的,那就沒有必要創建比處理器核數更多的線程)。

反之,如果你並行的工作單元還涉及等待I/O的操作(包括網絡連接等待),那麼使用CompletableFuture靈活性更             好,你可以根據Nthreads=Ncpu * Ucpu * (1+W/C)這個公式來計算創建線程池的大小。這種情況不使用Stream           的另一個原因是,處理流的流水線中如果發生I/O等待,流的延遲特性會讓我們很難判斷到底什麼時候觸發了等待。

下一篇中我會寫一些例子來助於理解

Nthreads=Ncpu * Ucpu * (1+W/C) 

Nthreads 創建的線程數

Ncpu 處理器的核的數目

Ucpu 期望的CPU利用率(0到1之間)

W/C 等待時間和計算時間的比率

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章