Я закончил бенчмарк, код выглядит следующим образом. Моя система имеет очередь заданий, поэтому обработчик rufus-scheduler будет выполнять только короткие и легкие задачи. Например, задания в очереди. В коде, только интервал регистрации между job.last_time и раз. Я предполагал, что чем больше интервал, тем ниже производительность. как «задержка»
require 'rufus-scheduler'
require 'awesome_print'
require 'logger'
SCHEDULE_COUNT = 1000
MAX_THREAD = 224
schedule_samples = { type: "cron", schedule: "* * * * *"}
$logger = Logger.new("benchmark.log")
scheduler = Rufus::Scheduler.singleton(:max_work_threads => MAX_THREAD)
class Handler
def self.call(job, time)
$logger.info job.last_time - time
end
end
SCHEDULE_COUNT.times do
scheduler.send(schedule_samples[:type].to_sym, schedule_samples[:schedule], Handler)
end
sleep 600
В результате немного разочарован .. тем больше потоков, тем лучше. Но я получил приблизительную задержку для своей будущей системы, и это приемлемо.
Я запустил этот код на своем ноутбуке, 1-ядерный 1-гигабайтный RHEL 64-битный Vmware и 4-ядерный 4-гигабайтный RHEL 64-бит Vmware.
JRuby версия
- Labtop JRuby 1.7.16.1 (1.9.3p392)
- Linux JRuby 1.7.19 (1.9.3p551)
Это не совсем то же самое, но она должна быть в порядке..? Диаграмма ссылок - среднее значение всех интервалов. Benchmark Result
Я могу держать увеличение максимум нити, чтобы выяснить, пик производительности. Но я решила, что не сделаю этого. Я буду использовать лучшую машину для производственной среды. Задержка 1000 ~ 2000 мс не должна быть проблемой. (в тесте наибольшая задержка составляла 700 мс на 1 ядре)
Опять же, Rufus-Scheduler отлично!
Очень круто, спасибо!Хотя я думаю, что JRuby заслуживает всех. Rufus-scheduler очень глупый. – jmettraux