我在互联网上搜索有关此内容的信息,Threads::Pool
,Threads::Queue
...
但我无法确定哪一个更适合我的情况。有人能给我一些建议吗?
答案 0 :(得分:0)
您可以使用Thread :: Queue和线程。
IPC(线程之间的通信)在进程之间更容易理解。
use strict;
use warnings;
use threads;
use Thread::Queue;
my $q = Thread::Queue->new(); # A new empty queue
# Worker thread
my @thrs = threads->create(sub {
while (my $item = $q->dequeue()) {
# Do work on $item
}
})->detach() for 1..10;#for 10 threads
my $dbh = ...
while (1){
#get items from db
my @items = get_items_from_db($dbh);
# Send work to the thread
$q->enqueue(@items);
print "Pending items: "$q->pending()."\n";
sleep 15;#check DB in every 15 secs
}
答案 1 :(得分:0)
我永远不会使用perl线程。原因是它们在概念上不是线程:您必须指定线程之间共享的数据。每个线程都运行一个perl解释器。这就是他们被称为解释线程或ithreads的原因。不用说,这会消耗很多内存,而不是并行运行。 fork()共享内存直到fork point。因此,如果它们是独立的任务,请始终使用fork。它也是Unix最常用的做事方式。