對於集合的並行計算,咱們是要使用流(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