Parallel Streams和forkjoinpool可以安全地用于生产吗?

时间:2017-04-20 08:28:59

标签: java parallel-processing java-8 production forkjoinpool

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

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

但是,我读了很多鼓励他们非常小心的文章。还有文章讨论它们内部设计不是很好,比如here

因此:准备并行流生产;它们是否广泛用于生产系统?

2 个答案:

答案 0 :(得分:5)

这个问题邀请了#34;意见&#34 ;;但我试着回答以事实为基础。

叉/加入

这些课程并不新鲜!正如您所能see,它们已经在Java 1.7中引入。换句话说:这些课程现在已存在好几年了;并在很多地方使用。因此:风险很低。

并行流

刚刚添加"最近"用Java术语(记住2017年遗留Java有多少;以及与其他语言相比,Java的发展速度有多慢)。我认为这里的简单答案是:我们还不知道并行流是否会成为"基石" Java编程,或者人们会喜欢其他方法在某些时候通过并行流来解决问题地址。

除此之外:其他语言(例如JavaScript)的用户习惯于改变#34; (也就是框架)几乎每月一次"基础。这意味着很多流失,但这也意味着"好东西"快速应用;喜欢:为什么后期改进的东西?!

我的意思是:你发现并行流可以帮助你提高性能; 当你的团队同意时,我们可以处理stream() - 编写代码的方式" ......然后就前进吧。

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

如果流是"那不是那么大的东西&#34 ;;那么,也许你必须在将来的某个时候重写一些代码。

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

答案 1 :(得分:0)

由于我写了你链接的文章,我应该说几句话。

正如其他人所说,试试看。并行流想要分割成平衡树:左,右,左,右分割。我这样做然后表现很好。如果没有,那么表现很糟糕。

框架使用二元递归除法。流是线性的。这不是一个很好的匹配。永远不要忘记音量会改变一切。添加缩放比例可能会给你带来惊喜,但在你尝试之前你不会知道。

让我们知道它是如何运作的。