Страница 1 из 1

PERL. Распределение ресурсов между процессов.

Добавлено: 04 дек 2006, 16:06
Anonymous
К примеру есть массив состоящий из 100 эл-в.
В цикле пораждается 4 процесса, мне нужна распределить между 4мя процессами эл-ты массива, каждому процессу по 25 и вывести их на STDOUT.
Думаю можна это зделать через файл, пайпы и разделяемую память ( без модуля IPC::Shareable ) но не знаю как, эксперементировал по разному, впринцыпе сама работа мне понятно но а вот реализовать perl-языком не могу, помогите пожалуйсто.

ps: использую fork()

вот скрипт на базе которога я думал делать:

Код: Выделить всё

#!/usr/bin/perl
use strict;
use warnings;

my $num = 4;
my @child;

for(1..$num) {
    my $pid = fork();
    if($pid) { push @child,$pid; }
    elsif($pid == 0) { print "$$\n"; exit(0); }
    else{ print "fork() failed : $!\n"; }
}

for(@child) { waitpid($_,0); }

Добавлено: 05 дек 2006, 17:11
Lioxa
Элементы масива передавать уже существующим процессам? т.е. масив будет меняться по ходу работы процессов-потомков?

Добавлено: 05 дек 2006, 17:27
grub
Отсутствует открытие пайпа на каждом из форков... Ну и обслуживание пайпа на каждом из его концов :)
Дети выходят как только напечатают свой pid

Короче, скелет на беглый взгляд правильный.

man perlipc на предмет правильного открытия каналов между предком и потомком и вперед.
Убедись, что в конце не повиснет зомбяков и все каналы будут закрыты.


Лаба?

Добавлено: 05 дек 2006, 17:30
grub
А вообще не проще ли так (условно):

Код: Выделить всё

@array=(1,2,3...100);
for ($i=1..4)
{
$pid=fork();
(unless $pid)
     {
      $index_start=25*($i-1);
      $index_end=25*$i-1;
        do_what_you_want_with_array_part_between_indexstart_and_indexend
     }
}

Добавлено: 05 дек 2006, 20:41
myst
Ему так и ответили уже на nixp.ru и послали читать man perlfork... :D