【发布时间】:2012-04-25 06:32:04
【问题描述】:
以下代码的内存消耗在其执行过程中会增加。 可能出了什么问题?我还需要做些什么才能彻底退出线程吗?
#!/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;
}
【问题讨论】:
-
你有一大堆全局变量,从我可以告诉意大利面条代码。在尝试任何花哨的东西之前,我会首先尝试控制您代码的这些方面。
-
只有一个全局变量 - @response。欢迎任何其他不使用全局变量的方法。
-
$i、@Thread和$URL也是全局的。 -
将它们设置为 main 的本地。
标签: multithreading perl exit detach