Java 并行流和forkjoinpool在生产中使用是否安全?

Java 并行流和forkjoinpool在生产中使用是否安全?,java,parallel-processing,java-8,production,forkjoinpool,Java,Parallel Processing,Java 8,Production,Forkjoinpool,我们开发了一个使用Java8并行流的API调用,我们获得了非常好的性能,几乎是进行压力测试时顺序处理的两倍 我知道这取决于用例,但我将其用于加密操作,因此我认为这是一个很好的用例 然而,我读过很多文章,这些文章鼓励我要非常小心地对待它们。还有一些文章讨论它们的内部设计不是很好,比如 因此:平行流生产准备就绪;它们是否广泛应用于生产系统?这个问题征求“意见”;但我试图以事实为基础回答 分支/聚合活动 这些课程并不新鲜!正如您所能看到的,Java1.7已经引入了它们。换句话说,这些课程到现在已经有好

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

我知道这取决于用例,但我将其用于加密操作,因此我认为这是一个很好的用例

然而,我读过很多文章,这些文章鼓励我要非常小心地对待它们。还有一些文章讨论它们的内部设计不是很好,比如

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

这个问题征求“意见”;但我试图以事实为基础回答

分支/聚合活动 这些课程并不新鲜!正如您所能看到的,Java1.7已经引入了它们。换句话说,这些课程到现在已经有好几年了;在很多地方都有使用。因此:风险低

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

除此之外:其他语言(如JavaScript)的用户几乎“每月”都习惯于“改变齿轮”(又名框架)。这意味着大量的流失,但也意味着“好东西”被迅速应用;比如:为什么要在事后改进事情

我的意思是:当你发现并行流可以帮助你提高性能;当您的团队同意“是的,我们可以处理stream()-编写代码的方式”。。。那就往前走吧

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

如果溪流“不是那么大的东西”;那么,也许你必须在将来的某个时候重写一些代码


长话短说:这是关于平衡潜在风险和潜在收益。看来你已经有了一些积极的经历;所以我认为一个合理的折衷方案是:应用流,但要有控制。所以,以后的决定“转错方向,摆脱它们”不会太贵。

既然我写了你链接到的文章,我应该说几句

正如其他人所说,试试看。平行流要拆分成一棵平衡树:左、右、左、右拆分。如果你这样做,那么表现就很好了。如果没有,那么性能就很糟糕

该框架使用二进递归除法。溪流是线性的。那不是一场好的比赛。永远不要忘记,音量改变一切。将缩放添加到混合中可能会让您感到惊讶,但在尝试之前您不会知道


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

我所知道的大多数生产系统甚至都没有使用java8。@HenningLuther和我们的系统,但我们想继续前进。我想这应该是件好事。既然你已经自己做了压力测试,为什么还要问这样的问题?我要说的是,你很可能会使用测试较少的JRE代码,而从来没有考虑过它…@Holger如果我没有读到我在问题中提到的那么多关于并行流的在线警告,我就不会问这个问题了。另外,正如我在下面所说的,“我只在测试服务器上测试了它,但我没有资源来模拟当前生产系统的一部分,以检查它是否在大规模上运行良好”我自己的判断不是很有经验,这就是为什么我问“安全”,你的意思是“实现可靠且经过良好测试吗”,那么是的。如果你的意思是“我是否可以通过不遵守规则或应用常识来打击自己,得到错误的答案,并获得糟糕的性能?”也是。完全同意,这是问题的一部分,对并行流及其对服务器的影响存在疑问,我只在测试服务器上对它进行了测试,但我没有足够的资源来模拟当前生产系统的一部分,以检查它是否在大规模上运行良好。所以我想可能有人已经开始了,这可能会给我们一个提示。根据您上次的编辑,这就是我们实际正在做的,我们只重新实现了整个系统的两个调用。我不一定要进去并更改大量现有代码。对新代码使用并行流;重新实现的触发因素是当前代码的低性能。