问题标签 [parallel-collections]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
216 浏览

scala - ParMap 值方法替代

ParMap(在 Scala 2.9 中)似乎没有 .values 方法。为什么会这样,如果我特别热衷于维护如下的并行处理链,我该如何解决?

0 投票
1 回答
102 浏览

scala - 通过对祖先类型的引用在并行集合上调用 map

我尝试使其可选择map顺序或并行运行操作,例如使用以下代码:

我注意到的是,“地图”操作并没有像我预期的那样并行运行。虽然没有条件,但它会:

(if(runParallel) theList else theList.par)我希望是这两种类型的最接近的共同祖先的表达式的类型,theList并且theList.par是一种可怕的类型,我不会在这里粘贴,但看起来很有趣(通过 scala 控制台:)

为什么map并行集合不并行工作?

更新:这在SI-4843中进行了讨论,但从 JIRA 票证中不清楚为什么会在 Scala 2.9.x 上发生这种情况。

0 投票
1 回答
568 浏览

scala - Scala 并行无序迭代器

我有一个Iterable需要执行的“工作单元”,没有特定的顺序,并且可以轻松地并行运行而不会相互干扰。

不幸的是,一次运行太多会超出我的可用 RAM,所以我需要确保在任何给定时间只有少数同时运行。

最基本的,我想要一个这种类型签名的函数:

这样输出Iterator不一定与输入的顺序相同(如果我想了解结果的来源,我可以输出一对与输入或其他东西。)然后消费者可以增量地使用生成的迭代器,而无需占用机器的所有内存,同时为该任务保持尽可能多的并行性。

此外,我希望该功能尽可能高效。例如,我最初的想法是按照以下方式做一些事情:

我希望它toSet会通知 Scala 的并行集合,一旦它们准备好,它就可以开始从其迭代器中以任何顺序生成元素,并且grouped调用是限制同时工作的数量。不幸的是,调用看起来并没有toSet达到预期的效果(在我的实验中,结果的返回顺序与没有par调用时的顺序相同)并且grouped通话是次优的。例如,如果我们的组大小为 100,其中 99 个作业立即在十几个核心上完成,但其中一个特别慢,则其余大部分核心将处于空闲状态,直到我们可以移动到下一个组。拥有一个最多与我的块大小一样大的“自适应窗口”会更干净,但不会被缓慢的工作人员阻止。

我可以设想自己用工作窃取(de)队列或类似的东西来写这样的东西,但我想在Scala的并行中已经在某种程度上为我完成了处理并发原语的许多艰苦工作收藏图书馆。有谁知道我可以重用它的哪些部分来构建这个功能,或者对如何实现这样的操作有其他建议?

0 投票
1 回答
408 浏览

scala - 使用 X.par.view 与 X.view.par 构建 Scala 并行视图?

根据关于并行集合和互联网搜索的论文,并行集合应该与视图一起使用,但我不清楚两者之间的区别

似乎coll.view.par失去了收藏的视野:

但我不知道为什么。它是一个功能还是一个错误?

0 投票
1 回答
325 浏览

scala - 替换 ForkJoinPool 上的 setMaximumPoolSize

我注意到自从 Scala 2.9.* 以来,该setMaximumPoolSize方法似乎已经消失了ForkJoinPool,它看起来就像我想要的那样。大多数关于限制 Scala 并行集合中的并行性的讨论都围绕setParallelism同一个类的方法(它也已经消失,但对我来说不是什么大问题),但在我的情况下,并行任务可以执行外部 IO,并且经常会阻塞在上面。然后ForkJoinPool在这种情况下启动更多线程并有效地针对有问题的共享 IO 资源执行 DOS,这是不可取的。

有没有办法以某种方式限制池中的线程数?我并不真正关心 spawn-when-blocked-on-IO 行为,但我想要某种程度的并行性,因为我的 IO 任务是独立的并且不会相互干扰。

0 投票
1 回答
654 浏览

scala - Scala 2.9 中的并行处理

假设我有一个约 10K 元素的数组,我需要处理数组的所有元素。我想以仅K并行处理元素的方式处理它们。

我用Scala 2.9. 我尝试了并行集合(见下文),但我看到的不仅仅是并行处理的K元素。

Scala 2.9您如何建议以仅K并行处理元素的方式处理数组?

0 投票
1 回答
604 浏览

scala - 并行收集处理大于内存大小的数据

有没有一种简单的方法来使用 scala 并行集合而不将完整集合加载到内存中?

例如,我有一个大集合,我想仅在一个适合内存的小块上并行执行特定操作(折叠),而不是在另一个块上等等,最后重新组合所有块的结果。

我知道,可以使用演员,但使用 par-collections 真的很好。

我已经写了一个解决方案,但它并不好:

0 投票
0 回答
1216 浏览

scala - 如何限制 scala/akka 应用程序可用的线程数

我编写了一个使用 scala 并行集合和 akka 演员的应用程序,我现在想研究它的“强缩放”属性,即给定问题实例的运行时间如何变化,作为可用核心/线程数的函数.

解决这个问题的正确方法是什么?我如何告诉应用程序最多只使用 n 个内核/线程?

0 投票
2 回答
17049 浏览

scala - 并行地图操作?

作为标准语言的一部分,Scala 是否提供了一种执行并行映射操作的方法?

例如,给定:

我可以:

但是,据我所知,这会将提供的函数按顺序映射到列表对象上。是否有一种内置方法可以将函数应用于单独线程(或等效线程)中的每个元素,然后将结果收集到结果列表中?

0 投票
1 回答
280 浏览

multithreading - scala并行集合:为工作线程提供线程局部变量的惯用方式

下面的进度函数是我的工作函数。我需要让它访问一些创建/获取成本高昂的类。库中是否有任何用于线程局部变量的标准机制?还是我必须自己编写一个对象池管理器?