сначала, мои навыки perlskills ограничены, поэтому, пожалуйста, имейте это в виду. ;)
Я написал perlscript, который индексирует каталог и что-то делает для каждого файла в нем.
Обработка файла занимает некоторое время. От 1 до 5 минут каждый при загрузке процессора почти 100% (одно ядро). Моя идея, потому что у меня есть процессор с четырьмя ядрами, чтобы обрабатывать более одного файла одновременно, что приводит меня к потокам Perl.
Итак, вот мои вопросы.
1) Верно ли мое предположение, что потоки perl автоматически распределяются между несколькими ядрами?
2) Я нашел этот пример кода, который делает то, что мне нужно, я думаю, но я не могу понять, как поддерживать активными только 8 потоков. Пример запускает статический подсчет потоков и выполняется после их обработки. Однако в моем случае, скажем, 50 файлов для обработки, но одновременно должны быть активны только 8 потоков.
Так должно быть так:
Прочитайте каталог, запустите 8 потоков для 8 первых файлов и продолжайте работу 8 потоков, пока все файлы не будут обработаны.
#!/usr/local/roadm/bin/perl
# This is compiled with threading support
use strict;
use warnings;
use threads;
use threads::shared;
print "Starting main program\n";
my @threads;
for ( my $count = 1; $count <= 10; $count++) {
my $t = threads->new(\&sub1, $count);
push(@threads,$t);
}
foreach (@threads) {
my $num = $_->join;
print "done with $num\n";
}
print "End of main program\n";
sub sub1 {
my $num = shift;
print "started thread $num\n";
sleep $num;
print "done with thread $num\n";
return $num;
}
Источник: https://wiki.bc.net/atl-conf/pages/viewpage.action?pageId=20548191
Я искал несколько часов, но не нашел примера, как это сделать. Было бы неплохо, если бы кто-нибудь дал мне подсказку, как начать.
Спасибо.