我正在研究一個需要FIFO消息隊列的Perl項目,以便在單個機器(UNIX)上的多個進程之間分配任務。隊列大小可能會增長到1M個作業。Perl的排隊系統
我試過IPC::DirQueue
,但是它變得非常慢,50k左右的工作入列。這個模塊可以在Perl中使用什麼替代方案?
我正在研究一個需要FIFO消息隊列的Perl項目,以便在單個機器(UNIX)上的多個進程之間分配任務。隊列大小可能會增長到1M個作業。Perl的排隊系統
我試過IPC::DirQueue
,但是它變得非常慢,50k左右的工作入列。這個模塊可以在Perl中使用什麼替代方案?
我在使用ZeroMQ解決這類問題方面取得了相當不錯的成功,包括Perl和其他語言。
根據我的經驗,ZeroMQ模塊似乎是目前Perl最可靠的綁定。
我沒有在你列出的條件下試過,但Thread::Queue已經證明對我有用。與forks結合使用,只要這些進程是由隊列創建者產生的,它就可以用於與進程進行通信。
use forks; # If you want to use processes instead of threads.
use Thread::Queue qw();
工人模型通常是理想的。
my $q = Thread::Queue->new();
my @workers;
for (1..$NUM_WORKERS) {
push @workers, async {
while (my $item = $q->dequeue()) {
...
}
};
}
# ... Enqueue requests [ $q->enqueue($request); ] ...
# Signal termination
$q->enqueue(undef) for [email protected];
# Collect workers.
$_->join() for @workers;
ZeroMQ看起來很有趣,我會試試看。 – 2012-04-13 18:51:53