当前位置: 首页 > 知识库问答 >
问题:

对于并行流上的skip(),是否存在一个好的用例?

边永贞
2023-03-14

2015年2月,当我最初问这个问题时,链接问题中报告的行为是违反直觉的,尽管规范允许(尽管文档中存在一些小的不一致)。

然而,塔吉尔·瓦列夫在2015年6月提出了一个新问题,我认为他清楚地证明了这个问题中报告的行为实际上是一个bug。Brain Goetz回答了他的问题,并承认,当由一个终端操作触发时,在skip()上不停止流的无序特征的反向传播是一个错误,该操作不必强制遵守元素的遭遇顺序(例如forEach())。此外,在他自己回答的评论中,他分享了一个链接,指向JDK错误跟踪系统中发布的问题。

该问题的状态现已解决,其修复版本为9,这意味着该修复程序将在JDK9中可用。然而,它也已被反向移植到JDK8更新60,构建22。

所以从JDK8u60-b22开始,这个问题就不再有意义了,因为现在skip()根据直觉行事,即使在并行流上也是如此。

我最初的问题如下。。。

最近我和一些同事讨论了这个问题。我说在并行流上使用skip()是毫无用处的,因为似乎没有一个好的用例。他们告诉我性能提升、FJ池处理、jvm可用的内核数量等等,但是他们不能给我任何关于其使用的实际例子。

对于并行流上的skip()?

看到这个问题了吗。请阅读问题和答案,以及评论,因为这里有很多好的论点。


共有1个答案

谷梁宁
2023-03-14

顺序与并行的选择只是执行策略之一。并行性选项的存在使得,如果问题的具体情况(问题大小、流操作的选择、每个元素的计算量、可用处理器、内存带宽等)允许,那么通过并行可以获得性能优势。并不是所有这些细节的组合都会带来性能上的好处(有些甚至可能会受到惩罚),所以我们让用户单独指定操作和执行策略。

对于像skip()limit()这样本质上与遭遇顺序相关的操作,确实很难提取大量并行性,但这是可能的;这通常发生在每个元素的计算功(通常称为“Q”)非常高的情况下。

这种情况可能很少(这可能是你的观点);这并不意味着操作和执行模式的组合“无用”,只是用处有限。但是,人们不会基于你能想象的有用组合来设计一个具有多个维度(操作、执行模式)的应用编程接口;假设每个组合都有一个明智的语义学(在这种情况下确实如此),最好允许所有模式下的所有操作,让用户决定哪个对他们有用。

 类似资料:
  • 问题内容: SeleniumIDE项目基于Firefox(及其插件架构)。我的应用程序(出于多种原因)仅在Internet Explorer(6+)上运行。实际上,我们会积极检查非IE浏览器并立即进行重定向。 这是一个已有6年历史的代码库,我们正试图删除所有需要IE依赖的html特质。 我们已经有了一组强大且不断增长的NUNIT代码测试。我们想添加Selenium来进行Web功能测试。是否有一个很

  • 我有一个架构,我们有两个独立的应用程序。原始源是一个sql数据库。App1监听CDC表以跟踪对该数据库中表的更改,对这些更改进行规范化和序列化。它将这些序列化的消息发送到Kafka主题。App2监听该主题,将消息调整为不同的格式,并通过HTTP将调整后的消息发送到各自的目的地。 所以我们的流媒体架构看起来像: SQL(CDC事件)- 我们希望在失败的情况下添加错误处理,并且不能容忍重复事件、丢失事

  • 我在读关于无国籍状态的文章时,在Doc中看到了这句话: 如果流操作的行为参数是有状态的,则流管道结果可能是不确定的或不正确的。有状态的lambda(或实现适当功能接口的其他对象)的结果取决于流管道执行过程中可能改变的任何状态。 现在,如果我有一个字符串列表(),然后尝试使用并行流以以下方式从其中删除重复的字符串: 这段代码是否有问题,因为并行流会分割输入,并且在一个块中的distinct不一定意味

  • 我在2020年5月19日做了Leetcode挑战,这是在线股票跨度。它的描述是这样的: 编写一个StockSpanner类,它收集某一股票的每日报价,并返回该股票当日价格的跨度。该股票今日价格的跨度定义为该股票价格小于或等于今日价格的最大连续天数(从今天开始向后)。 我使用了一种使用堆栈的方法,该堆栈保存大小为2的int数组,其中索引0存储价格,索引1存储该价格的跨度。我提交并通过了,但只击败了大

  • 基本上,我有2个数据帧,具有以下基本结构: 因此,列1中的一些值在两个数据帧中都是重复的,我想创建一个新的数据帧,其中每个数据帧的Col1中只有具有唯一值的行,因此在psuedo代码中: 唯一的\u到\u df1 我尝试了一些函数,但它们要么似乎只导出Col1的唯一值,而不是整个表,要么似乎只适用于一个数据帧中removing.extracting重复值,而不是两个数据帧之间的比较。任何帮助/建议

  • 问题内容: 我有两个arraylist 我想检查a2中是否存在a1的所有元素。这是我正在尝试的问题 这没有给出一致的结果…还有其他方法可以做到吗? 问题答案: 不知道我是否正确理解了您的问题,为什么使用? 试过这个: 它输出 添加一个额外的元素将使它失败(如预期): 它输出