我需要 Perl 中的多线程方面的帮助。
基本逻辑是启动20个线程。我有一个数组@dataarray
,我希望将 20 块数据传递给每个线程。比如说,@dataarray
里面有 200 行数据,所以前 10 行将被发送到线程 1,接下来的 10 行应该被发送到线程 2,所以它们不会覆盖彼此的数据,最终在处理线程后应该更新返回结果到@outputarray
at与 source 相同的索引位置@datarray
。
例如:第 19 行(索引位置 18)从@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();
}