java什么是并行_java - 我应该尽可能使用并行流吗?

Stream API旨在使编写计算变得容易,这些计算方式从执行方式中抽象出来,使顺序和并行之间的切换变得容易。

然而,仅仅因为它简单,并不意味着它总是一个好主意,事实上,仅仅因为你可以放弃.parallel()是一个坏主意。

首先,请注意,并行性除了在有更多内核可用时更快执行的可能性之外没有任何好处。 并行执行总是涉及比顺序执行更多的工作,因为除了解决问题之外,它还必须执行子任务的调度和协调。 希望通过分解多个处理器的工作,您将能够更快地得到答案; 这是否真的发生取决于很多事情,包括你的数据集的大小,你在每个元素上做了多少计算,计算的性质(具体来说,一个元素的处理是否与其他元素的处理相互作用?) ,可用处理器的数量,以及竞争这些处理器的其他任务的数量。

此外,请注意并行性也经常暴露计算中的非确定性,这通常是通过顺序实现隐藏的; 有时这无关紧要,或者可以通过约束所涉及的操作来缓解(即,减少运算符必须是无状态和关联的。)

实际上,有时并行性会加速你的计算,有时它不会,有时它甚至会减慢它的速度。 最好先使用顺序执行开发,然后应用并行性,其中(A)您知道实际上有益于提高性能,(B)它实际上会提高性能。 (A)是业务问题,而不是技术问题。 如果您是性能专家,您通常可以查看代码并确定(B),但智能路径是衡量。 (而且,在你确信(A)之前不要打扰;如果代码足够快,最好在其他地方应用你的大脑周期。)

最简单的并行性能模型是“NQ”模型,其中N是元素的数量,Q是每个元素的计算。 通常,在开始获得性能优势之前,您需要产品NQ超过某个阈值。 对于像“将数字从1加到N”这样的低Q问题,您通常会看到N = 1000和N = 10000之间的盈亏平衡。 对于Q值较高的问题,您会看到在较低阈值处出现断层现象。

但现实非常复杂。 因此,在您获得专业知识之前,首先要确定顺序处理何时实际上是在为您付出代价,然后衡量并行性是否会有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值