Самый простой способ - использовать протектор. Вы можете использовать «очереди» для отправки команд и приема выходов взад и вперед.
Вы можете просто создать x число потоков, а затем поставить в очередь множество команд и отправить их.
Если вам нужно обработать выход, немного сложнее.
http://metacpan.org/pod/Thread::Queue
Это может быть решено с помощью модулей на основе событий, как хорошо, но что нужен совсем другой подход. Таким образом, вы можете создать несетевую функцию, а затем легко преобразовать ее в многопоточную.
#without processing the output
use strict;
use warnings;
use threads;
use Thread::Queue;
my $q = Thread::Queue->new(); # A new empty queue
my $maxThreads = 20;
# Create Worker threads
for (1..$maxThreads){
my $thr = threads->create(
sub {
# Thread will loop until no more work
while (defined(my $cmd = $q->dequeue())) {
do_someting($cmd);
}
}
);
}
# Send work to the threads
$q->enqueue($cmd1, ...);
# Signal that there is no more work to be sent
$q->end();
# Join up with the thread when it finishes
$thr->join();
10 до 20.000 соединений tcp. – ovntatar