У меня есть около 100 подпрограмм, которые я должен запускать с помощью потоков.
Как я могу ограничить все потоки, чтобы за один раз запускать только 10 потоков? Могу ли вы дать мне пример кода.
Вот пример кода, где я должен реализовать егоОграничение номеров потоков для запуска за один раз
use threads;
my ($thr1) = threads->create(\&sub1,$parameter);
my ($thr2) = threads->create(\&sub2,$parameter);
...
my ($thr100) = threads->create(\&sub100,$parameter);
my $result;
for my $t(@threads){
#print "$t\n";
(my @getit)= $t->join();
my $tmp = join '', @getit;
$result .= $tmp;
}
print "$result\n";
Или у вас есть какие-либо другие методы для этого. Каждая подпрограмма будет выполнять другую задачу.
Как насчет [Thread :: Pool] (https://metacpan.org/pod/Thread::Pool) – user1937198
Число потоков, которые могут * действительно работают * параллельно ограничено числом процессоров , Как вы можете ограничить количество потоков, которые вы * создаете * в первую очередь зависит от вашей архитектуры - в модели босса-работника вы просто порождаете * n * работников и назначаете задания через очередь. – amon
@amon, Это верно, только если потоки связаны с процессором. В заблокированном потоке не используется процессор. – ikegami