list 与 future 并行操作

Parallel operation on list with future

作为一般性建议,我只是想知道以下内容是否有意义。

我有一个列表,我需要根据以下条件进行过滤:假设该列表包含类型 A、B、C 和 D 的内容,我想取 A 的 n0 elt,B 的 n1 elt , C 的 n2 elt 和 D 的 n3 elt,然后从中列出一个列表。

迭代方法非常干净(即遍历所有列表,使用 4 个计数器,将 elt 添加到每个列表,直到每个相应的计数器达到它的限制,即 n1、n2、n3、n4),但是同事在工作告诉我利用多个 cpu 并使用 future.

并行化操作

换句话说,启动 4 个筛选列表的未来操作,如果适用则删除 (i.e.resultinglist > nx),“resultinglist.size - n0 or n1 or n2 or n3 or n4” .然后等待结果并合并列表。

我认为这对于我们用来很容易地迭代完成的事情来说有点矫枉过正。我只是想知道人们对此有何看法。是的,我可以 运行 测试并比较速度,但它提出了一个问题,即我们究竟什么时候才能确保我们正在利用多重 cpu 架构。因为我确实理解这个建议背后的动机。但是,我不知道如何判断它可能适得其反。我们都陷入了争论,无法说明使用并行化是好事还是坏事。换句话说,我们没有标准。测试是唯一的了解方式吗?

如果您对这四个 futures 感到困扰,您可以使用 Parallel collection,它非常易于使用,并且您不需要对非并行版本进行大量更改。

同样,是否并行将取决于其他因素,例如列表有多大,您将对每个元素执行的操作是否有一些争用。

您可能还会发现 this paper on parallel collection by Martin Odersky and others interesting .

避免premature optimization.

如果您进行基准测试并发现您正在做的事情对于您的要求来说太慢,那么合并并行版本并进行一些基准测试。