我正在开发一个Perl项目,该项目需要一个FIFO消息队列,用于在一台机器上的多个进程之间分配任务(UNIX)。队列大小可能会增加到1M个作业。
我已经尝试了IPC::DirQueue
,但是当排入约5万个作业时,它变得非常缓慢。这个模块有哪些好的替代品可以在Perl中使用?
答案 0 :(得分:9)
我使用ZeroMQ在Perl和其他语言中使用ZeroMQ取得了相当不错的成功。
根据我的经验,ZeroMQ模块似乎是目前Perl最可靠的绑定。
答案 1 :(得分:4)
我没有在您列出的条件下尝试过,但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 1..@workers;
# Collect workers.
$_->join() for @workers;