未来

时间:2015-07-14 13:10:25

标签: scala future

我只是想知道以下是否有意义。

我有一个列表,我需要根据以下标准进行过滤:假设列表包含A,B,C和D类型的东西,我想取n的n0,B的n1 elt,n2 C的elt和D的el,然后列出一个列表。

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

换句话说,启动过滤列表的4个未来操作,如果适用则删除(即结果列表> nx),"得到列表.size - n0或n1或n2或n3或n4"。然后等待结果并合并列表。

我认为这对于我们用来迭代地轻松完成的事情来说太过分了。我只是想知道人们对此的看法。是的,我可以运行测试并比较速度,但它提出的问题是,我们何时可以确保我们正在利用多个CPU架构。因为我确实理解了这个建议背后的动机。但是,我不知道如何判断它可能适得其反。我们都陷入辩论,并且能够说明使用并行化是好情况还是坏情况。换句话说,我们没有标准。测试是唯一知道的方法吗?

非常感谢,

中号

2 个答案:

答案 0 :(得分:1)

如果您对这四种期货感到困扰,可以使用Parallel collection,这非常容易使用,而且您不需要从非并行版本中进行大量更改。

再次判断是否并行将取决于其他因素,例如列表的大小,您在每个元素上执行的操作是否确实存在争用。

您也可以找到this paper on parallel collection by Martin Odersky and others interesting

答案 1 :(得分:1)

避免使用premature optimization

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