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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对集合进行并行计算方法选择的建议: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的主要内容,如果未能解决你的问题,请参考以下文章

stream的使用

Java 8 中的 Streams API

使用jdk8 stream简化集合操作

玩转 Java8 Stream 流,常用方法,详细用法大合集!

JDK8 Stream、Collector 浅析(一)

高效的 Minkowski 和计算