Perlでのマルチスレッドのサポートが必要です。
基本的なロジックは、20スレッドを開始することです。配列が1つ@dataarrayあり、20チャンクのデータを各スレッドに渡す必要があります。たとえば、@dataarray200行のデータが含まれているため、最初の10行はスレッド1に送信され、次の10行はスレッド2に送信されるため、相互にデータが上書きされることはなく、最終的にスレッドの処理後に戻り結果がに更新さ@outputarrayれます。ソースと同じインデックス位置@datarray。
例:行19(インデックス位置18)from@dataarrayがスレッド番号2に送信されたため、処理後にスレッド2が更新され$outputarray[18] = $processed_stringます。
配列の位置から特定のスレッドへの送信方法を理解する必要があります。
#!/usr/bin/perl
use strict;
use threads;
my $num_of_threads = 20;
my @threads = initThreads();
my @dataarray;
foreach(@threads)
{
$_ = threads->create(\&doOperation);
}
foreach(@threads)
{
$_->join();
}
sub initThreads
{
my @initThreads;
for(my $i = 1;$i<=$num_of_threads;$i++)
{
push(@initThreads,$i);
}
return @initThreads;
}
sub doOperation
{
# Get the thread id. Allows each thread to be identified.
my $id = threads->tid();
# Process something--- on array chunk
print "Thread $id done!\n";
# Exit the thread
threads->exit();
}