お仕事で、数百台のサーバに対して、多少時間のかかる処理をする必要があった。
1 つずつ実行していては、さすがに日が暮れてしまう。
そうなるとスレッドで並列実行したいが、対象のサーバの分、数百個スレッドを生成すると逆に重くなってしまう。
というわけで、スレッド数に上限を設けて実行した、という話。
雛形はこんな感じ。
#!/usr/bin/ruby -Ku
# -*- coding: utf-8 -*-
#
# 20120619
# thread template
#
require 'thread'
def job(arg)
sleep rand(0)
print "#{arg}\n"
end
def main
# スレッド数上限
thread_max = 3
# キュー
jobqueue = Queue.new
(1..10)