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

11K*_*tes 9 concurrency clojure divide-and-conquer

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

Omr*_*ein 4

在当前的 Clojure 1.4 中,您可以使用pmappcalls或来完成此操作pvalues。该pmap函数是 的并行版本map,而pcallspvalues并没有真正具有类似的非并行版本(尽管,我认为list是 的“非并行版本” pvalues)。

但是,对于您描述的问题,听起来您想要使用并行版本的reduce. Clojure 1.2 中有一个旧版本(请参阅此处),我从未使用过它,因此我无法谈论它的实用性。

Clojure 1.5 中将包含这个新的“reducers”库,Rich Hickey在此博客中介绍了该库。这里,fold似乎是一个并行版本reduce