-1

次のコードのメモリ消費量は、実行中に増加します。何がうまくいかないのですか?スレッドからきれいに終了するために他に何かする必要がありますか?

#!/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;
}
4

1 に答える 1

2

http://perldoc.perl.org/threads.htmlから

「ほとんどのシステムでは、スレッドの頻繁かつ継続的な作成と破棄により、Perl インタープリターのメモリ フットプリントがますます増加する可能性があります。スレッドを起動してから ->join() または ->detach() するのは簡単ですが、それら, 寿命の長いアプリケーションの場合,スレッドのプールを維持し, キューを使用して保留中の作業をスレッドに通知し, 必要な作業のためにそれらを再利用する方が良い. このモジュールの CPAN ディストリビューションには簡単な例が含まれています (examples/pool_reuse .pl) 再利用可能なスレッドのプールの作成、使用、および監視を示しています。"

スレッドの投票を行ってみてください。

于 2012-04-25T09:26:53.680 に答える