首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于耗时方法的parallelStream

用于耗时方法的parallelStream
EN

Stack Overflow用户
提问于 2021-12-26 00:33:07
回答 1查看 186关注 0票数 5

我有这样的事情:

代码语言:javascript
复制
// sequential version
for(var t: tasks){ 
    // run() is a time consuming method (approx. 20-30 seconds)
    t.run();
}

我有大约。1000 (独立)任务和以上需要大约。1000x25秒。run()-method是专用的 CPU密集型(不涉及 I/O操作)。

我转到了parallelStream:

代码语言:javascript
复制
// parallel version
tasks.parallelStream().forEach(Task:run);

并且用parallelStream测量每个task.run()需要大约。15-20秒。因此,它肯定比使用顺序版本要快一些。

我是否可以使用parallelStream (以及它的叉连接)来进行这样长时间的运行操作(每个task.run()都需要大约。或者将executorServices与自定义线程池一起使用(例如,由于系统稳定性、性能等原因)?

我想知道在这样长时间运行的任务中使用parallelStream (叉-联接)是否有什么害处。我认为分叉连接应该只用于非常短的运行任务(最大)。1-2秒),但我不确定是否如此,以及为什么。

EN

回答 1

Stack Overflow用户

发布于 2021-12-26 00:57:55

Collection#parallelStream更简单--您需要更少的代码,但是您无法控制何时或即使使用并行性。

ExecutorService为您提供了对并行处理的大量控制,但公开了更多的工作,因此您需要更多的代码和更多的知识(但两者都不多)。

先尝试并行流。如果这看起来足够好,而且您没有处理其他许多请求,那么就在这里结束。

如果并行性似乎不够,或者如果您正在处理其他请求,则使用executor服务,因为所有流共享一个线程池,因此如果它们保持忙碌,其他基于流的代码将冻结。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70483582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档