首页 > 代码库 > 对集合进行并行计算方法选择的建议: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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。