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

對於集合的並行計算,咱們是要使用流(stream)仍是CompletableFuture?
網絡


若是進行的是計算密集型的操做,而且沒有I/O,那麼推薦Stream接口,由於實現簡單,同時效率也是最高的(若是所         有的線程都是計算密集型的,那就沒有必要建立比處理器核數更多的線程)。ide

反之,若是你並行的工做單元還涉及等待I/O的操做(包括網絡鏈接等待),那麼使用CompletableFuture靈活性更             好,你能夠根據Nthreads=Ncpu * Ucpu * (1+W/C)這個公式來計算建立線程池的大小。這種狀況不使用Stream           的另外一個緣由是,處理流的流水線中若是發生I/O等待,流的延遲特性會讓咱們很難判斷到底何時觸發了等待。spa

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

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

Nthreads 建立的線程數it

Ncpu 處理器的核的數目table

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

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

相關文章
相關標籤/搜索