纯函数式并行编程:API设计与实现
1. 并行计算的初步探索
在并行计算的场景中,我们常常会遇到如何高效组合并行任务的问题。例如,对于如下形式的组合:
map2(
map2(
unit(1),
unit(2))(_ + _),
map2(
unit(3),
unit(4))(_ + _))(_ + _)
不管使用何种数据结构来存储这样的描述,其占用的空间可能比原始列表本身还要大。因此,我们期望描述能更轻量级。一种思路是让 map2 变为惰性的,并让其两侧立即并行执行,这样还能避免给某一侧更高的优先级。
2. 显式分叉(Explicit forking)
然而,让 map2 的两个参数总是并行计算并不总是合理的。例如:
Par.map2(Par.unit(1), Par.unit(1))(_ + _)
在这个例子中,两个组合的计算任务执行速度极快,没必要专门为它们创建单独的逻辑线程。但当前的 API 没有提供这样的信息传递方式,即程序员无法明确指定分叉(fork)的位置。
为了解决这个问题,我们引入 fork 函数:
def fork[A](a: => Par[A]): Par[A]
超级会员免费看
订阅专栏 解锁全文
1632

被折叠的 条评论
为什么被折叠?



