Concurrency Clojure中分治算法的并行化
首先,假设我有一个问题,计算10亿位数的Pi,计算一个大数字的阶乘,或者对一个大列表执行mergesort。我想把问题分成更小的任务,同时执行每个任务并合并结果。首先,这种并发类型的名称是什么,您将如何在Clojure中实现它?在当前的Clojure 1.4中,您可以使用maybe或。Concurrency Clojure中分治算法的并行化,concurrency,clojure,divide-and-conquer,Concurrency,Clojure,Divide And Conquer,首先,假设我有一个问题,计算10亿位数的Pi,计算一个大数字的阶乘,或者对一个大列表执行mergesort。我想把问题分成更小的任务,同时执行每个任务并合并结果。首先,这种并发类型的名称是什么,您将如何在Clojure中实现它?在当前的Clojure 1.4中,您可以使用maybe或。pmap函数是map的并行版本,而pcall和pvalues实际上没有类似的非并行版本(尽管我认为list是pvalues的“非并行版本”) 但是,对于您描述的问题,听起来您希望使用并行版本的reduce。Cloj
pmap
函数是map
的并行版本,而pcall
和pvalues
实际上没有类似的非并行版本(尽管我认为list
是pvalues
的“非并行版本”)
但是,对于您描述的问题,听起来您希望使用并行版本的reduce
。Clojure1.2()中有一个旧版本,我从未使用过,因此我无法谈论它的实用性
Clojure1.5将提供这个新的“reducers”库,RichHickey在博客上对此进行了讨论。这里,
fold
似乎是reduce
的并行版本,我没有深入研究过它们,但这可能是“Clojure reducer”的工作,他们在引擎盖下使用叉接并行。