QtConcurrent 的 Scala 类似物

2023-12-20

Scala(或 Java)的 QtConcurrent 的类似物是什么?即MapReduce、并行map 和foldl 的简化实现。 谢谢


您可以使用 Scala 并行集合。它们目前是 Scala nightly 版本的一部分,并将在 Scala 2.9 中发布。这个想法是,常规集合中可用的大多数操作都是并行的,因此可以以相同的方式使用并行集合。

目前,有几种可用的集合类型 - 并行范围、并行数组和并行哈希尝试。例如,您可以调用并行map and fold对并行数组的操作如下:

scala> val pa = (0 until 10000).toArray.par
pa: scala.collection.parallel.mutable.ParArray[Int] = ParArray(0, 1, 2, 3, 4, 5, 6,...

scala> pa.map(_ + 1)
res0: scala.collection.parallel.mutable.ParArray[Int] = ParArray(1, 2, 3, 4, 5, 6, 7,...

scala> pa map { v => if (v % 2 == 0) v else -v }
res1: scala.collection.parallel.mutable.ParArray[Int] = ParArray(0, -1, 2, -3, 4, -5,...

scala> pa.fold(0) { _ + _ }
res2: Int = 49995000

还有其他可用的并行收集操作。注意fold必须采用结合运算符 - 在上面的示例中,加法是结合的 ((A + B) + C == A + (B + C)),即您可以按任何顺序添加数字的子序列,并且您将始终获得相同的结果总和(reduce有类似的合同)。

另一件需要注意的事情是传递给并行集合的闭包是同时调用的。如果它们有副作用,例如修改环境中的局部变量,则必须同步这些访问。例如,你可以这样做:

scala> var a = 0                                                                                                                                                                 
a: Int = 0                                                                                                                                                                       

scala> pa foreach { a += _ }                                                                                                                                                     

scala> a                                                                                                                                                                         
res1: Int = 49995000             

scala> a = 0
a: Int = 0

scala> pa foreach { a += _ }

scala> a
res7: Int = 49990086

并且每次都有不同的结果,因为foreach调用{ a += _ }在平行下。在上面的例子中,a应该同步,用锁或原子保护。

但其想法是使用内置组合器来完成任务并倾向于函数式编程,避免如上例所示的局部副作用。

您可能想在其他答案中提供的链接中详细了解其内部机制。

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

QtConcurrent 的 Scala 类似物 的相关文章

  • 多处理器提升::线程?所有线程都在一个处理器上运行

    我有一个令人尴尬的并行问题 我想在多个处理器上执行 我原以为boost thread会自动将新线程发送到新处理器 但所有线程都在与父进程相同的核心上执行 是否可以让每个线程在不同的处理器上运行 或者我是否需要 MPI 之类的东西 我的怀疑是
  • Scala 中简单表达式的非法开始

    我刚刚开始学习scala 在尝试实现递归函数时 我在 Eclipse 中收到错误 简单表达式的非法开始 def foo total Int nums List Int if total nums sorted head 0 0 else r
  • 这个错误是什么意思(SimpleHttpConnectionManager 被错误使用)?

    我正在尝试从 ElasticSearch 中读取数据到 Spark conf es resource sflow sflow es nodes ES01 es query some query rdd sc newAPIHadoopRDD
  • Scala Eclipse 自动完成功能损坏?

    我正在尝试让自动完成功能在 Eclipse 中用于 Scala 开发 我试图从 Scala 类引用 java 类 但自动完成功能从未找到它 例如 以这个 scala 类为例 object Main def main args Array S
  • 我需要比较两个数据帧以进行类型验证并发送非零值作为输出

    我正在比较两个数据帧 基本上 这些是两个不同数据源的模式 一个来自 hive 另一个来自 SAS9 2 我需要验证两个数据源的结构 因此我将模式转换为两个数据帧 它们是 SAS 架构将采用以下格式 scala gt metadata sho
  • 减少最大值并保存其索引

    int v 10 2 9 1 3 5 7 1 2 0 0 int maximo 0 int b 0 int i pragma omp parallel for shared v private i reduction max maximo
  • 如何在 Scala 中跳过可选参数?

    给定以下带有可选参数的函数 def foo a Int 1 b Int 2 c Int 3 我想保留默认值a但将新值传递给b and c仅通过位置赋值 而不是通过命名赋值 即以下任何语法都可以 foo 5 7 foo 5 7 Scala 可
  • 使用 Scala 的解析器组合器时如何忽略不匹配的前面文本?

    我真的很喜欢解析器组合器 但是当我不关心相关文本之前的文本时 我对我提出的提取数据的解决方案并不满意 考虑这个小型解析器来获取货币金额 import scala util parsing combinator case class Amou
  • HBase中删除多行的有效方法

    有没有一种有效的方法可以删除 HBase 中的多行 或者我的用例是否不适合 HBase 有一个表称为 图表 其中包含图表中的项目 行键的格式如下 chart date reversed ranked attribute value reve
  • Scala:折叠与折叠左

    我试图了解fold 和foldLeft 以及各自的reduce 和reduceLeft 如何工作 我使用 Fold 和 FoldLeft 作为示例 scala gt val r List ArrayBuffer 1 2 3 4 10 sca
  • 为什么摩尔定律需要并行计算? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这是我一本CS教科书中的一个问题 我很茫然 我不明白为什么它一定会导致并行计算 有人想指出我正确的方向吗 摩尔定律只是说 价格合理的集成电路上的晶体管
  • Shapeless 中 TypeClass 特征的 emptyCoproduct 和 coproduct 方法的用途是什么

    我并不完全清楚这样做的目的是什么emptyCoProduct and coproduct的方法TypeClass无形中的特质 什么时候会使用TypeClass特质而不是ProductTypeClass 这两种方法的实施方式有哪些示例 假设我
  • 使用 R 并行处理 XML 节点

    我正在尝试与 R 并行处理 XML 文档xml2包装和foreach功能 但我收到 node attrs x node nsMap ns 中的错误 外部指针无效 尝试导出树集群导出 示例代码 library xml2 library for
  • Ruby 相当于 Python 的多处理模块是什么?

    为了在 Ruby 或 Python 中获得真正的并发性 我需要创建新的进程 Python 使用以下命令使这变得非常简单multiprocessing模块 它抽象了所有 fork wait 的好处 让我专注于我的代码 Ruby 有类似的东西吗
  • MapReduce 只是另一个编程原理的概括吗?

    我正在研究并行编程 并且正在研究映射缩减和其他分布式算法 最好只学习mapreduce 还是有更通用的算法可以更好地为我服务 这取决于您打算使用算法的目的 映射减少 http labs google com papers mapreduce
  • FSC 每次都会重新编译

    即使没有必要 FSC 每次都会重新编译我的 scala 文件 我可以编译它两次 而无需在尝试之间编辑任何内容 并且它会重新编译它们 例如我有2个文件 你好 scala class Hello print hello 和 Tokens sca
  • 在特征中定义值比定义有什么优势吗?

    在 Scala 中 一个val可以覆盖一个def 但是一个def不能覆盖val 那么 声明一个特质有什么好处吗 像这样 trait Resource val id String 而不是这个 trait Resource def id Str
  • 如何在haskell快速傅里叶变换上应用数据并行?

    我有一个 haskell 代码来解决快速傅里叶变换 并且我想对其应用数据并行性 然而 我使用的每一个策略都会产生太多的火花 而且大多数都溢出了 有谁知道如何在以下算法上应用良好的数据并行策略 radix 2 Cooley Tukey FFT
  • Scala - InvalidClassException:没有有效的构造函数

    我创建了一个Serializable番石榴的版本ImmutableRangeMap and Builder在 Scala 中以便在我的 Spark 应用程序中使用 我的构造函数中有一个零参数SerializableImmutableRang
  • Scala 中的预期开始定义错误

    我正在尝试运行中提供的 Scala 代码这个 math stackexchange 帖子 https math stackexchange com questions 1233656 albert bernard and cheryl po

随机推荐

  • 我可以让 Heroku Logs 仅返回概述错误的行吗?

    Heroku 日志是一个很好的资源 可以在出现问题时检查应用程序发生了什么情况 不幸的是 它们还记录了大量信息 有什么方法可以过滤日志以仅查找错误消息吗 尝试这个 heroku logs t grep error 获取错误发生时的运行列表
  • 我有 30 个注释,并且还在不断增加。正在寻找一种更简单的方法来编码吗?

    我正在将多个注释编码到一个项目中 目前我有 30 个注释 并且还在不断增加 我想知道是否有一种更简单的方法必须为每个注释创建 annotation h 和 annotation m 类 目前在我的地图视图控制器中 我创建注释对象并将它们放置
  • 如何使用 matlab 查找矩阵中唯一(不重复)的值

    每个人 假设我有以下 3x3 矩阵 A 0 1 3 0 0 3 0 0 0 我的问题是如何使用matlab找出该矩阵中的唯一值 在这种情况下 结果应该是 1 我尝试过使用 value unique A 但它返回的向量 0 1 3 不是我想要
  • CKAN 中的修订历史

    CKAN 是否提供数据集的修订历史记录 我看到一个表和一个 API 调用 但在修改数据集或元数据字段时 我在 UI 和 或数据库中看不到任何内容 编辑数据集的标题 您将看到包含添加到 package revision 表中的新值的行 然而
  • ASP.NET / iPad Safari 缓存问题?

    我们有一个使用 ASP NET Ajax 的 ASP NET Web 应用程序 我们从 iPad 上的 Safari 中打开它 效果很好 我们将其作为单独的图标保存到主屏幕上 我们添加了元标记 使其能够全屏加载 无需 Safari 的导航栏
  • C中不完整类型和对象类型的定义是什么?

    的定义是什么不完整型 and 对象类型在C语言中 另外 您能否提供一些例子 ANSI C99 在不同的地方提到了这两种类型类别 尽管我发现很难理解它们的确切含义 没有段落 句子明确定义它们是什么 让我们去在线 C 标准 草案 n1256 h
  • 如何查找 iPhone 应用程序 CPU 使用率 100% 的原因

    我在一个应用程序中诊断出一个奇怪的行为 大约 10 分钟后 CPU 使用率达到 100 应用程序中没有泄漏 并且它发生在应用程序不执行任何操作时 我可以使用 时间分析器 通过仪器对此进行分析 但是有没有办法找到实际原因是什么 使用 Inst
  • 如何在类路径中运行带有 jar 的 java 类?

    所以 我可以很好地做到这一点 java mypackage MyClass if mypackage MyClass class存在 我也可以愉快地这样做 java cp myjar jar mypackage MyClass 类文件是否存
  • NSMutableArray 和 NSPredicate 过滤

    我正在尝试使用对象中的两个实体来过滤我的数组 就像我有一个 Person 对象 其中有姓名 地 址 号码 电子邮件等 我正在尝试仅使用名称和号码来过滤我的对象数组列表 如何使用 NSPredicate 来实现这一点 创建谓词 以下假设您的P
  • 具有不同子项的 Sql XML 路径

    我已经完成了很多 XML PATH 语句 但这个语句我却忽略了 或者对于多个不同的子项来说甚至可能是不可能的 最终结果应该是这样的
  • 为所有架构编译 PJSIP 2.5 库

    要为 iPhone 设备编译 PJSIP 库 我使用此代码 make distclean make clean ARCH arch arm64 configure iphone enable opus codec make dep make
  • Tomcat 7 GZIP 压缩不起作用

    我在 tomcat 的 conf server xml 文件中添加了以下行以启用 gzip 压缩 但它不起作用 页面仍未压缩
  • 如何从文本中删除变音符号?

    我正在制作一个瑞典语网站 瑞典语字母是 和 我需要使用户输入的字符串成为 PHP 的 url 安全 基本上 需要将所有字符转换为下划线 除了这些 A Z a z 1 9 所有瑞典语都应该像这样转换 到 a 到 a 到 o 只需删除上面的点
  • 为什么 HSV 到 RGB 算法会这样工作?

    我读过维基百科的文章从 HSV 转换为 RGB http en wikipedia org wiki HSL and HSV From HSV 但我不明白 为什么每个案例选项都是这样的 如果顺序很重要 为什么它们是这样排序的 维基百科概述了
  • Symfony 在模板中包含静态 html

    我刚刚开始学习如何使用 Symfony 我相信它很简单 但我在模板引擎方面遇到了一些问题 我想在 Symfony 中的一个树枝模板中包含一个静态 HTML 片段 2 5 6 现在我在资源目录中创建了一个静态子文件夹 这可能会改变 但它肯定不
  • 雪花在程序编译期间删除反斜杠?

    由于某种原因 Snowflake 正在从我的正则表达式函数中删除反斜杠 但仅当我在创建 Javascript 过程时将该函数放在 之间时才删除 对于上下文 这里是我的正则表达式函数 CREATE OR REPLACE FUNCTION RE
  • Crud Webapp Google Apps 脚本

    是否可以使用 Google Apps 脚本创建 Crud Webapp 我需要创建一个能够更新 Google 电子表格并获取值的网络表 是的 它是可能的 您可以使用谷歌应用程序脚本插入 更新行 删除和检索行 试试这个链接https gith
  • 为什么 Boost 库在线程屏障的实现中使用 m_ Generation 变量?

    boost 库 C 11 标准之前 提供了对线程的支持 作为其支持的一部分 它还提供了 barrier 的实现 这是一个允许同步的简单类 引用提升网站 http www boost org doc libs 1 56 0 doc html
  • 如何使此 jQuery 代码与 GridView 控件一起使用

    edit 什么不起作用 我有两列 批准全部 拒绝全部 我如何限制用户只允许每一列中的一个复选框 如果您不使用 gridview 下面的代码可以工作 我在这里问了这个问题 只允许选中一个 批准 拒绝 复选框 https stackoverfl
  • QtConcurrent 的 Scala 类似物

    Scala 或 Java 的 QtConcurrent 的类似物是什么 即MapReduce 并行map 和foldl 的简化实现 谢谢 您可以使用 Scala 并行集合 它们目前是 Scala nightly 版本的一部分 并将在 Sca