首页 > 代码库 > 对集合进行并行计算方法选择的建议:stream的并行流,CompletableFuture

对集合进行并行计算方法选择的建议: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 等待时间和计算时间的比率

本文出自 “kisszero” 博客,请务必保留此出处http://kisszero.blog.51cto.com/9395417/1899898

对集合进行并行计算方法选择的建议:stream的并行流,CompletableFuture