2010-12-16 9 views

cevap

7

İşte pmap için kod:

(defn pmap 
    "Like map, except f is applied in parallel. Semi-lazy in that the 
    parallel computation stays ahead of the consumption, but doesn't 
    realize the entire result unless required. Only useful for 
    computationally intensive functions where the time of f dominates 
    the coordination overhead." 
    ([f coll] 
    (let [n (+ 2 (.. Runtime getRuntime availableProcessors)) 
     rets (map #(future (f %)) coll) 
     step (fn step [[x & xs :as vs] fs] 
       (lazy-seq 
       (if-let [s (seq fs)] 
        (cons (deref x) (step xs (rest s))) 
        (map deref vs))))] 
    (step rets (drop n rets)))) 

Gördüğünüz gibi, pmap mevcut tüm işlemcileralır ve döngüsel bunları kullanır. Yani, hayır, iş parçacığı sayısını ayarlamak için bir yol yoktur ... ama her zaman bu işlevsellik sağlayacak kendi pmap yazabilirsiniz.

İlgili konular