2010年3月18日木曜日

WorkerManagerの並行性(concurrency)

スズキです。

WorkerManagerで同時に実行できる処理の数は、下記のように"-c"オプションで指定できます。

# workermanager.pl -h
--------
...
-c : the number of concurrency (default 4).
...
--------

"/etc/init.d/workermanager"で起動する場合は、
"/etc/sysconfig/workermanager"のCONCURRENCYの値でしていできます。

# cat /etc/sysconfig/workermanager
--------
CONCURRENCY=4
WORKS_PER_CHILD=100
PROG=/usr/bin/workermanager.pl
PIDFILE=/var/run/workermanager.pid
CONF=/etc/worker.conf.yml
--------

挙動を確認するため、以下のようなコードが入ったWorkerを、
CONCURRENCYが4の場合と1の場合で、クライアントから4回連続実行してみます。

--------【Perl】--------
...
$log->debug("start - $id");
sleep(5);
$log->debug("stop - $id");
...
--------

【CONCURRENCY=4】

# cat /var/log/workermanager_error.log
--------
...
start - B
start - A
stop - B
start - D
stop - A
start - C
stop - D
stop - C
...
--------

同時に平行に実行されていることがわかります。
ちなみに"ps"の結果は下記となります。

# ps aux | grep workermanager.pl
--------
root 20450 ... perl /usr/bin/workermanager.pl -c 4 -w 100 -f
/etc/worker.conf.yml
root 20451 ... perl /usr/bin/workermanager.pl -c 4 -w 100 -f
/etc/worker.conf.yml
root 20452 ... perl /usr/bin/workermanager.pl -c 4 -w 100 -f
/etc/worker.conf.yml
root 20453 ... perl /usr/bin/workermanager.pl -c 4 -w 100 -f
/etc/worker.conf.yml
root 20454 ... perl /usr/bin/workermanager.pl -c 4 -w 100 -f
/etc/worker.conf.yml
...
--------

【CONCURRENCY=1】

# cat /var/log/workermanager_error.log
--------
...
start - A
stop - A
start - B
stop - B
start - D
stop - D
start - C
stop - C
...
--------

前の処理が終わってから、次の処理が実行されていることがわかります。
ちなみに"ps"の結果は下記となります。

# ps aux | grep workermanager.pl
--------
root 20468 ... perl /usr/bin/workermanager.pl -c 1 -w 100 -f
/etc/worker.conf.yml
root 20469 ... perl /usr/bin/workermanager.pl -c 1 -w 100 -f
/etc/worker.conf.yml
...
--------

ということで、今回は諸事情で"CONCURRENCY=1"です...

--------
http://www.suz-lab.com

0 コメント: