【发布时间】:2012-10-28 23:53:28
【问题描述】:
我想以透明的方式并行评估任何函数的参数(不更改任何源代码级别)。
例如 -c = f(a, b) 应该会导致:a 和 b 被并行评估,然后调用 f。
一种方法是将上面的表达式转换为:
a' = future { a }
b' = future { b }
f' = lift f
(这样f: a -> b -> c 就变成了f: Future<a> -> Future<b> -> Future<c>)
这样c' = f'(a', b')
这可以在scala中做到吗?
【问题讨论】:
-
试图做到这一点透明地可以说是违背了Scala的原则——你最好以简洁和优雅地.
-
“透明”是什么意思?狂热的并行性是一种产生大量废热的绝妙方法,并且比串行程序花费的时间要长得多。所以大概你打算指定哪些函数有资格并行化?
-
以防万一有人认为“哦,并行化一切都没什么大不了的,我们将弥补我们在小东西上失去的大东西”——天真地并行化
math.max与期货比串行math.max长整整 100,000 倍。这很难恢复。
标签: scala expression future lifting