我们开发了一个使用Java8并行流的API调用,并且获得了非常好的性能,与进行压力测试时的顺序处理相比几乎翻了一番。
我知道这取决于用例,但是我将其用于加密操作,因此我认为这是一个很好的用例。
但是,我阅读了很多鼓励他们格外小心的文章。也有一些文章讨论它们在内部设计上不是很好,例如here。
因此:准备并行流生产;它们在生产系统中被广泛使用吗?
最佳答案
这个问题需要“意见”。但我尝试回答基于事实的问题。
叉/连接
这些课程不是新课程!您可以see,它们已经在Java 1.7中引入。换句话说:这些课程到现在已经有几年了。并在许多地方使用。因此:低风险。
并行流
在Java术语中添加了“最近”(请记住,2017年遗留的Java数量;以及Java的发展速度(与其他语言相比))。我认为这里的简单答案是:我们尚不知道并行流是否会成为Java编程的“基石”,或者人们是否会更喜欢在某种程度上通过并行流解决问题的方法。
除此之外:其他语言(例如JavaScript)的用户几乎每个月都被用来“改变齿轮”(又名框架)。这意味着大量的流失,但这也意味着“好东西”会被迅速应用。就像在:为什么事后改进?
我的意思是:当您发现并行流可以帮助您提高性能时;当您的团队同意“是的,我们可以处理stream()-编写代码的方式” ...然后继续前进。
换句话说:当并行流帮助您的团队/产品“变得更好”时,为什么不尝试利用它呢?现在,不是在12或24个月内。
如果流“不是那么大的事情”;那么,也许您将来必须在某些时候重写一些代码。
长话短说:这是关于在潜在风险与潜在收益之间取得平衡。看来您已经取得了一些积极的经验。因此,我认为合理的折衷方法是:以受控方式应用流。因此,以后的决定“错误的转变,摆脱它们”不会变得太昂贵。
关于java - 并行流和forkjoinpool是否可以在生产中安全使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43514160/