возвращаемые значения дочернего процесса - PullRequest
0 голосов
/ 26 марта 2020

В использовании Parallel :: ForkManager у меня мало сомнений. Как будто я вызываю дочерний процесс для l oop, то кто выполнит следующий оператор, родительский или дочерний. Код:

   my $pm = Parallel::ForkManager->new($forks);  foreach my $q (@numbers) {
    my $pid = $pm->start and next;
    my $res = calc($q); 
    if($res == error )
    {return};  
    if (#res == some_no)
    {do something and next;
    }
    $pm->finish(0, { result => $res, input => $q });

} .... я хочу знать о выходных данных вилки и хочу, чтобы родительский процесс выполнялся 1-й следующий и 2-й следующий. Также хотите узнать, завершится ли дочерний процесс посередине, сможет ли родитель знать это и как?

1 Ответ

2 голосов
/ 26 марта 2020

Два основных источника параллелизма в perl - это многопоточность - use threads; и разветвление. Для последнего, Parallel::ForkManager, вероятно, лучшая ставка там.

Однако для копирования? Это может помочь не так сильно, как вы думаете. Ваш ограничивающий фактор не будет CPU, это будет IO на диск.

Распараллеливание операций ввода-вывода не так сильно, как вы думаете, и во многих случаях может привести к обратным результатам - если сделать диск sh, записав в двух местах, вы снизите общую пропускную способность.

...