2010-12-16 122 views

Répondre

7

Code est ici pour pmap:

(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)))) 

Comme vous pouvez le voir, pmap prend tous les processeurs disponibles et les utilise de manière cyclique. Donc, non, il n'y a aucun moyen de définir le nombre de threads ... mais vous pouvez toujours écrire votre propre pmap, qui fournira une telle fonctionnalité.