java - 并行流和 forkjoinpool 在生产中使用安全吗?

标签 java parallel-processing java-8 production forkjoinpool

我们开发了一个使用 Java8 并行流的 API 调用,我们获得了非常好的性能,在进行压力测试时,几乎是顺序处理的两倍。

我知道这取决于用例,但我将它用于加密操作,所以我认为这是一个很好的用例。

但是,我读过很多鼓励对它们非常小心的文章。也有文章讨论它们内部设计得不是很好,例如 here

因此:并行流生产准备好了吗?它们在生产系统中广泛使用吗?

最佳答案

此问题诚邀“意见”;但我尝试基于事实来回答。

fork /合并

这些类(class)并不新鲜!尽你所能see ,它们已经在 J​​ava 1.7 中引入了。换句话说:这些类(class)已经存在好几年了;并在很多地方使用。因此:风险低。

并行流

在 Java 术语中“最近”添加了这些内容(请记住 2017 年 Java 有多少遗留问题;以及[与其他语言相比]Java 的发展速度有多慢)。我认为这里简单的答案是:我们还不知道并行流是否会成为 Java 编程的“基石”,或者人们是否会更喜欢其他方法来解决并行流所解决的问题某个点。

除此之外:其他语言(例如 JavaScript)的用户习惯于几乎“每月”“更换齿轮”(也称为框架)。这意味着大量的流失,但也意味着“好东西”会很快得到应用;就像:为什么要事后改进事情?!

我的意思是:您发现并行流可以帮助您提高性能时; 你的团队同意“是的,我们可以处理使用stream()方式编写代码”......然后继续前进。

换句话来说:当并行流帮助您的团队/产品“变得更好”时,为什么不尝试利用它呢?现在,不是 12 或 24 个月后。

如果流“不是那么伟大的事情”;那么好吧,也许你必须在将来的某个时候重写一些代码。

长话短说:这是关于平衡潜在风险和潜在 yield 。看来你已经取得了一些积极的经验;所以我认为合理的妥协是:应用流,但以受控的方式。因此,后来的决定“走错了路,摆脱他们”并不会变得太昂贵。

关于java - 并行流和 forkjoinpool 在生产中使用安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43514160/

相关文章:

java - jetspeed 2 和 pluto 有什么区别?

ruby - 如果它们不是真正的并行,我能给 Ruby 线程什么用?

java - 如何检查 Date 对象或 Calendar 对象是否为有效日期(真实日期)?

java - 方法引用需要 API 级别 22

java - 根据 toMap 集合中的值过滤流

java - 将 Java 对象传递到 Retrofit 中未正确处理

java - 生成满足某些条件的随机数

java - 从 C++ 调用 java 代码 : exception java. lang.NoSuchMethodError

algorithm - 设计并行 For 循环以执行代码执行顺序

c++ - Intel TBB 禁用嵌套并行