Tengo dos scripts que usan Mechanize para buscar una página de índice de Google. Supuse que EventMachine sería más rápido que un hilo de Ruby, pero no lo es.¿Por qué el aplazamiento de EventMachine es más lento que un subproceso de Ruby?
costos de código EventMachine: "0.24s user 0.08s system 2% cpu 12.682 total"
Rubí costos de código Tema: "0.22s user 0.08s system 5% cpu 5.167 total "
estoy usando EventMachine en el camino equivocado?
EventMachine:
require 'rubygems'
require 'mechanize'
require 'eventmachine'
trap("INT") {EM.stop}
EM.run do
num = 0
operation = proc {
agent = Mechanize.new
sleep 1
agent.get("http://google.com").body.to_s.size
}
callback = proc { |result|
sleep 1
puts result
num+=1
EM.stop if num == 9
}
10.times do
EventMachine.defer operation, callback
end
end
Rubí Tema:
require 'rubygems'
require 'mechanize'
threads = []
10.times do
threads << Thread.new do
agent = Mechanize.new
sleep 1
puts agent.get("http://google.com").body.to_s.size
sleep 1
end
end
threads.each do |aThread|
aThread.join
end
¿Qué versión e implementación de ruby está ejecutando? Para implementaciones con un GIL (bloqueo de intérprete global), es posible que los subprocesos verdes no se ejecuten completamente al mismo tiempo. Puede intentar ejecutar el ejemplo en jRuby o Rubinius para confirmar su comportamiento observado –