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?