如何在Clojure中并行化分治算法

时间:2012-08-31 15:58:32

标签: concurrency clojure divide-and-conquer

首先说我有一个问题,计算Pi的10亿位数,计算大数的阶乘,或者在大型列表上执行mergesort。我想将问题分成较小的任务,并同时执行每个任务并合并结果。首先,这种类型的并发性的名称是什么?如何在Clojure中完成?

1 个答案:

答案 0 :(得分:4)

在当前的Clojure 1.4中,您可以使用pmappcallspvalues完成此操作。 pmap函数是map的并行版本,而pcallspvalues并不具有类似的非并行版本(尽管我认为listpvalues)的“非并行版本”。

但是,对于您描述的问题,听起来您可能希望使用reduce的并行版本。来自Clojure 1.2( see here)的旧版本,我从未使用过,所以我无法谈论它的实用性。

Clojure 1.5将成为这个新的“reducers”库,Rich Hickey博客关于here。在此,fold似乎是reduce的并行版本。

相关问题