Gli attori di celluloide lavorano parallelamente lenti?

0

Sono nuovo per gli attori e sto solo giocando in ruby con Celluloid. Ho questo codice qui sotto

module Enumerable
  # Simple parallel map using Celluloid::Futures
  def pmap(&block)
    futures = map { |elem| Celluloid::Future.new(elem, &block) }
    futures.map(&:value)
  end
end

p Benchmark.measure{
 100_000.times.pmap { |n| n * 2 }
}

p Benchmark.measure{
 100_000.times.map { |n| n * 2 }
}

il tempo per pmap: 13.98 s

il tempo per la mappa: 0,021 s

Perché l'implementazione della celluloide è molto più lenta? Sto usando male o è celluloide intrinsecamente molto più lento anche se è multi-core / parallel computing (sto usando Jruby quindi non GIL)? La celluloide è semplicemente ottimale a causa del thread multiplo == buon incapsulamento, che non c'è mai un aumento delle prestazioni per calcoli più piccoli? C'è, c'è qualche esempio di dove Celluloid effettivamente esegue più velocemente?

    
posta Grimbox 02.03.2017 - 23:24
fonte

1 risposta

1

Perché la tua unità di lavoro ha un tempo di esecuzione molto veloce:

|n| n * 2

È probabile che l'overhead di esecuzione dei future sia molto maggiore del tempo totale di esecuzione delle tue unità di lavoro. Dopo tutto, la versione pmap richiede la creazione di diecimila% di oggetti% co_de. Ci vuole un po 'di tempo.

Se la tua unità di lavoro impiegasse un po 'più tempo per essere eseguita, penso che vedresti risultati marcatamente diversi.

    
risposta data 02.03.2017 - 23:30
fonte