理解平行存在并找到

2023-11-27

我拿一个List[Int]并想要搜索一个值x where x * 10 > 500在平行下。所以exists应该返回true如果列表包含 51 或更大的任何值。

def f(x: Int) = {
  println("calculating for " + x)
  Thread.sleep(100 - x)
  println("finished " + x)
  x * 10
}

val res = List.range(1, 100).par.exists(f(_) > 500)

结果如下:

calculating for 1
calculating for 25
calculating for 50
calculating for 75
calculating for 13
finished 75          // <-- first valid result found: 75 * 10 > 500
finished 50
calculating for 51   // but it kicks off more expensive calculations
finished 25
calculating for 26   
finished 13
calculating for 14   
finished 1
calculating for 2
finished 51
finished 26
calculating for 27   // and more
finished 14
calculating for 15
finished 2
calculating for 3
finished 27
calculating for 28
finished 15
calculating for 16
finished 3
calculating for 4    // and more...
finished 28
calculating for 29
finished 16
calculating for 17
finished 29
calculating for 30
finished 4
calculating for 5
finished 17
calculating for 18
finished 30
finished 5
calculating for 6
finished 18
finished 6
res: Boolean = true

我使用的是 Scala 2.9.1 的双核机器。

这里发生了什么?这是否按预期工作?为什么它不在找到第一个结果后立即向其他线程发送消息以中止任务?这可能会非常昂贵,如果f是一个昂贵的计算。

find似乎以类似的方式工作,搜索更多的值,即使文档说“元素可能不一定是迭代顺序中的第一个这样的元素”并且“选择是不确定的”。


为什么它不直接向其他线程发送消息以中止 一旦找到第一个结果就立即执行任务?

因为那是不可能的。 JAVA 不允许你这样做。或者更确切地说,它确实如此,但已被弃用。

请参阅(已弃用)的说明Thread.stop():

这种方法本质上是不安全的。使用 Thread.stop 停止线程 使其解锁所有已锁定的监视器(作为 未经检查的 ThreadDeath 异常传播的自然结果 堆栈上)。如果之前受这些保护的任何对象 监视器处于不一致状态,损坏的对象变成 对其他线程可见,可能导致任意行为。 stop 的许多用法应该被替换为简单修改某些内容的代码 变量来指示目标线程应该停止运行。这 目标线程应该定期检查这个变量,并从 如果变量指示它以有序的方式运行它的方法 就是停止运行。如果目标线程等待很长时间(在 例如条件变量),应使用中断方法 中断等待。有关更多信息,请参阅为什么Thread.stop, Thread.suspend 和 Thread.resume 已弃用?.

换句话说,因为带锁的多线程代码本质上是被破坏的,所以他们不赞成一种完美的方法,这种方法可以愉快地与不共享可变状态的线程一起使用,因此不需要锁定数据结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解平行存在并找到 的相关文章

  • C++并行排序

    我需要对存储在结构数组中的数据块进行排序 结构体没有指针 每个块都有其计数器编号以及数组中数据块与结构块相等的位置的坐标 例如 如果我们有一个数据数组 我们可以将其分为 4 个 NxN 块 那么在结构块的索引数组中我们有 4 个结构块 每个
  • 如何不让 Gradle 立即退出 Scala 的 REPL?

    这些简单的线条在build gradle暴露一个repl理想情况下会启动 scala REPL 的任务 点燃并保持活力就是这样 repl 加载后 它立即收到 quit 命令并退出 的重要部分build gradle dependencies
  • 一起使用 R6 类和 foreach() %dopar% 的问题

    当与 foreach 一起使用时 我在 R6 类上遇到问题 可能与环境有关 我使用的是 Windows 假设有两个 R6 类 class1 和 class2 class1 中的 method1 依赖于 class2 例如 请参见下面的示例代
  • parList 和 parBuffer 如何选择?

    我从 haskell 并行开始 我已经成功学习了如何使用一些策略 例如 r0 rseq rdeepseq parList parMap 现在我正在进一步寻求更高的效率 所以这是我的问题 有什么区别parList and parBuffer
  • 具有定期更新的静态数据集的结构化流

    将流媒体与静态数据集合并是结构化流媒体的一个重要功能 但在每个批次中 数据集都会从数据源刷新 由于这些源并不总是那么动态 因此在指定的时间段 或批次数 内缓存静态数据集会提高性能 在指定的时间段 批次数之后 将从源重新加载数据集 否则从缓存
  • 在“GROUP BY”子句中重用选择表达式的结果?

    在 MySQL 中 我可以有这样的查询 select cast from unixtime t time Y m d H 00 as datetime as timeHour from some table t group by timeH
  • Spark JSON 文本字段到 RDD

    我有一个 cassandra 表 其中有一个名为 snapshot 的文本类型字段 其中包含 JSON 对象 identifier timestamp snapshot 我了解到 为了能够使用 Spark 对该字段进行转换 我需要将该 RD
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • 单击“发送”按钮事件时,我们可以在哪里获取 xml/元数据格式的表单数据?

    我是一个新的 scala 学习者 作为要求的一部分 我需要将表单数据插入 activemq 队列中以进行提交事件 我尝试调试发送方法代码 以了解单击 FormRunnerActions scala 类中的发送按钮时我们到底在哪里获取 xml
  • 在 Scala 中实现不区分大小写比较的字符串类

    我有许多带有不区分大小写的字段的类 我想将这些类的实例放入 HashMap 中 并通过不区分大小写的字符串查找它们 我不是每次想通过字符串索引实例或通过字符串查找实例时都使用 toLowerCase 而是尝试将此逻辑封装在 CaseInse
  • 如何在 Scala mutable.Seq 上追加或前置

    Scala 有一些我不明白的地方collection mutable Seq http www scala lang org api current index html scala collection mutable Seq 它描述了所
  • 如何在 Scala 中使用 Circe 解码 JSON 列表/数组

    我有代码片段 cursor downField params downField playlist downField items as List Clip 其中 Clip 是字符串和数字的简单 case 类 传入的 Json 应包含一个
  • 在 Scala 中创建 Java 对象

    我有一个 Java 类 Listings 我在 Java MapReduce 作业中使用它 如下所示 public void map Object key Text value Context context throws IOExcept
  • 在 Scala 中使用隐式的良好实践 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何客观原因在代码中到处使用隐式参数只是为了缩短应传递的参数数量 我有一个 REST API 端点的每个调用都有一个唯一的 ID 应该在调
  • 如何在平面级别将 JsValue 合并到 JsObject

    我有两个从案例类创建的 JsValue 即书籍和书籍详细信息 val bookJson Json tojson Book val bookDetailJson Json tojson BookDetail 格式为 Book id 1 nam
  • scala 中的抽象类型

    我正在经历抽象类型Scala我收到一个错误 我正在尝试的例子 scala gt class Food abstract class Animal type SuitableFood lt Food def eat food Suitable
  • 将 Apache Flink 与 Lagom 结合使用时出现 java.io.NotSerializedException

    我正在 Lagom 的微服务实现中编写 Flink CEP 程序 我的 FLINK CEP 程序在简单的 scala 应用程序中运行得非常好 但是当我在 Lagom 服务实现中使用此代码时 我收到以下异常 拉戈姆服务实施 override
  • 使用 Either 处理 Scala 代码中的故障

    Optionmonad 是 Scala 中处理有或无事物的一种很好的表达方式 但是 如果在 什么也没发生 时需要记录一条消息怎么办 根据 Scala API 文档 Either 类型通常用作 scala Option where Left
  • 如何将 Spark-sftp 等新库添加到我的 Pyspark 代码中?

    当我尝试在 Spark conf 中设置包依赖项 spark sftp 时 我收到 ClassNotFoundException 但当我使用以下命令执行脚本时它会起作用 Spark submit packages com springml
  • Scala Monad - 完整的示例[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 如何在C/C++中设置ffmpeg qscale进行图像编码

    我有一个使用 ffmpeg 作为后端的 C 工作图像编码器 我正在将视频输入并将帧保存为 jpeg 但我在调整输出 jpeg 的质量时遇到困难 我尝试过的事情 环境AVCodecContext s global quality and co
  • 为什么函数原型位于不同的函数块内?

    我试图通过 K R 来理解 C 我无法理解书中发现的两个函数的代码 void qsort int v int left int right int i last void swap int v int i int j if left gt
  • NetBeans 使用哪种 Java 编译器?

    如果我告诉 NetBeans 6 9 在保存时进行编译 NetBeans 会警告我编译的类与使用 JDK 编译器编译的类不同 在同一对话框中 Java 平台设置为 JDK 1 6 NetBeans 使用哪个编译器 为什么 NetBeans
  • .NET FtpWebRequest 是否支持隐式 (FTPS) 和显式 (FTPES)?

    我被要求支持隐式和显式 FTPS 也称为 FTPES 我们目前使用的是 NETFtpWebRequest 是否FtpWebRequest支持两种类型的FTPES 有什么区别 Thanks 据我所知 当前 NET 2 0 和 3 5 版本的
  • 根据 Pandas python 中的两个条件选择数据帧的行

    我有一个 df 我想运行类似的命令 subsetdf df loc df Item Desc str contains X True or df Item Desc str contains Y True 选择 项目描述 列中包含 X 或
  • Emacs 中 LaTeX 的代码折叠

    是否有一个 Emacs 次要模式 或一段 elisp 代码 可以让您在 LaTeX 模式下有选择地隐藏 显示环境 例如 我想移动到一个很长的开头 begin figure 块 击键 然后将该图形环境的内容隐藏在视图中 类似地与 begin
  • Android 的仪器测试 - 方向改变后如何接收新的 Activity?

    我正在尝试测试新创建的活动 方向更改后 是否已正确重新初始化 下面的代码显示从 getActivity 返回的活动是在 setUp 中构造的活动 而不是新创建的活动 Test public class MyActivityTest exte
  • 如何在使用按键移动时在 pygame 中转动精灵

    So basically ive been hoping it would be possible to effectively turn your sprite while moving it around with WASD Any i
  • 当 UIViewController 被释放时,调度队列会发生什么?

    我试图更好地理解保留周期 特别是相对于调度队列 我正在使用 AVFoundation 并在 sessionQueue 上管理 AVCaptureSession private let sessionQueue DispatchQueue l
  • 正则表达式提取两个字符或标签之间的所有子字符串

    我需要提取由两个字符 或者可能是两个标签 包围的所有字符串 这就是我到目前为止所做的 NSRegularExpression regex NSRegularExpression regularExpressionWithPattern op
  • MySQL删除重复记录但保留最新记录

    我有独特的id and email字段 电子邮件会重复 我只想保留所有重复项的一个电子邮件地址 但包含最新的id 最后插入的记录 我怎样才能实现这个目标 想象一下你的桌子test包含以下数据 select id email from tes
  • 与 Xcode 分开安装 Git

    首先 我很抱歉这是一个非常简单的问题 但 Git 对我来说绝对是全新的 基本上 我已经涉足 iOS 开发一段时间了 现在有了一个项目想法 我想开始研究 并且我第一次计划将其纳入源代码管理 现在我知道 Xcode 4 有一些 Git 集成 但
  • mariadb IF 语句错误消息?

    我测试sql查询 IF 3 3 THEN SELECT TRUE ELSE SELECT FALSE END IF 我在 SQLyog 中执行查询 我收到下面的错误消息 You have an error in your SQL synta
  • 多对多关系的内联表单集的挂件

    遵循凯文 迪亚斯 Kevin Dias 的指示本文 我尝试为两个相关模型生成一种表单 这似乎适用于一对多关系 但是我在使用多对多关系时遇到了问题 以下是用户角色管理的一些示例代码 models py from django db impor
  • 如何授予 SQL Server 读取我的 SSL 密钥的权限?

    我最近创建了一个自签名证书并在 SQL Server 2014 中打开了加密 问题是现在 SQL Server 服务无法启动 本文from 2010 将问题识别为权限问题 SQL Server 服务没有读取 SSL 证书私钥的必要权限 问题
  • 如何计算 linq to sql 查询中列值的总和?

    我写这个查询 var query2 from p in behzad Compare closed numbers in CRM and Billing system detail counters where p fileid point
  • Eclipse 调试 - 行:不可用

    我似乎在谷歌上找不到任何东西告诉我为什么会这样以及解决方案是什么 我正在逐步执行第三方代码 我有源代码 并且非常希望看到当前行正在执行 查看 javac 编译标志 我看到 g none 标志 如果设置了此标志 这是否足以解释为什么我看不到行
  • 在 Angular2 中跨模块共享服务的最佳方式是什么

    我正在使用如下所述的应用程序结构 index ts app module ts app component ts hero directory hero module ts hero ts Data Object hero service
  • S4方法调度慢吗?

    我的 S4 类有一个被调用多次的方法 我注意到执行时间比独立调用类似函数要慢得多 因此 我在类中添加了一个类型为 function 的槽 并使用该函数而不是该方法 下面的示例显示了执行此操作的两种方法 并且它们的运行速度都比相应的方法快得多
  • 理解平行存在并找到

    我拿一个List Int 并想要搜索一个值x where x 10 gt 500在平行下 所以exists应该返回true如果列表包含 51 或更大的任何值 def f x Int println calculating for x Thr