以下代码的内存消耗在执行过程中会增加。 怎么可能出错?还有什么我需要做的就是从线程中彻底退出吗?
#!/usr/bin/perl -w
use strict;
my ($i,$URL);
my @Thread;
my $NUM_THREADS=4;
my @response:shared =();
while(1)
{
for($i=0;$i<$NUM_THREADS;$i++)
{
if( $response[$i] is processed)
{
$URL=FindNextURL();
$Thread[$i]=new threads \&Get,$i,$URL;
$Thread[$i]->detach();
}
}
# wait for atleast one $response[$i]
# if ready process it
}
sub Get
{
my $i=$_[0];
my $URL=$_[1];
$response[$i]=FetchURL($URL);
return;
}
答案 0 :(得分:2)
来自http://perldoc.perl.org/threads.html
“在大多数系统中,频繁和持续创建和销毁线程可能会导致Perl解释器的内存占用量不断增长。虽然只需启动线程然后 - > gt; join()或 - &gt; detach()它们,对于长期存在的应用程序,最好维护一个线程池,并将它们重用于所需的工作,使用队列通知线程的待处理工作。此模块的分发包含一个简单的示例(examples / pool_reuse.pl),说明了可重用线程池的创建,使用和监视。“
请尝试对线程进行轮询。