2010-12-16 11 views

Respuesta

7

Aquí es código para 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)))) 

Como se puede ver, pmap toma todos los procesadores disponibles y los utiliza de forma cíclica. Por lo tanto, no, no hay forma de establecer el número de subprocesos ... pero siempre puede escribir su propio pmap, que proporcionará dicha funcionalidad.

Cuestiones relacionadas