Ich habe zwei Skripte, die Mechanize verwenden, um eine Google-Indexseite abzurufen. Ich nahm an, dass EventMachine schneller ist als ein Ruby-Thread, aber das ist es nicht.Warum verzögert sich EventMachines langsamer als ein Ruby-Thread?
eventmachine Code Kosten: "0.24s user 0.08s system 2% cpu 12.682 total"
Ruby-Themen-Code Kosten: "0.22s user 0.08s system 5% cpu 5.167 total "
Bin ich mit eventmachine in die falsche Richtung?
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
Rubin Thema:
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
Welche Version und Implementierung von Ruby verwenden Sie? Bei Implementierungen mit einer GIL (globale Interpretersperre) werden die grünen Threads möglicherweise nicht vollständig gleichzeitig ausgeführt. Vielleicht möchten Sie versuchen, das Beispiel in jRuby oder Rubinius auszuführen, um Ihr beobachtetes Verhalten zu bestätigen. –