jifu
Гость
|
![](/Themes/VU3/images/post/xx.gif) |
« : 20-07-2013 10:48 » |
|
Приветствую... Не пойму, в чем дело? Почему не ветвится код? Вроде, как каждый раз новое значение должно быть, или, я чего не понимаю... #!/usr/bin/perl -w
sub rnd { return rand () }
use Parallel::ForkManager; my $pm = Parallel::ForkManager -> new(3);
for (1..15) { $pm -> start and next; print rnd, "\n"; sleep(2); $pm -> finish; $pm -> wait_all_children; } У меня тут один и тот же процесс что ли шпарит??? ![Я шокирован!](/Smileys/test/shocked.gif) C:\>c.pl 0.001251220703125 0.001251220703125 0.001251220703125 0.001251220703125 0.001251220703125 0.001251220703125 Terminating on signal SIGINT(2)
|
|
« Последнее редактирование: 20-07-2013 22:02 от RXL »
|
Записан
|
|
|
|
RXL
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #1 : 20-07-2013 22:08 » ![new](/Themes/VU3/images/english/new.gif) |
|
Почему ты так думаешь? Факты что говорят? ![Улыбаюсь](/Smileys/test/smile.gif) start [ $process_identifier ]
This method does the fork. It returns the pid of the child process for the parent, and 0 for the child process. If the $processes parameter for the constructor is 0 then, assuming you're in the child process, $pm->start simply returns 0.
An optional $process_identifier can be provided to this method... It is used by the "run_on_finish" callback (see CALLBACKS) for identifying the finished process.
|
|
« Последнее редактирование: 20-07-2013 22:11 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
jifu
Гость
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #2 : 21-07-2013 03:53 » |
|
А почему тогда каждый раз одно и то же значение генерится? Вот как я это вижу, каждый раз новый процесс должен вызывать подпрограмму rnd, а у меня одно и то же, где же ветвление?
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #3 : 21-07-2013 07:53 » |
|
jifu, вопрос-подсказка: как работает генератор псевдо-случайных чисел?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
RXL
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #4 : 21-07-2013 08:34 » |
|
Поддерживаю. Попробуй изменить строчку: print join(' ', $$, rnd, rnd, rnd), "\n"; В начале программы также вставь: print $$, "\n"; И почитай мануалы: perldoc -f rand perldoc -f srand И ошибка с wait_all_children: дочерний процесс завершится ранее, а в родительском это выполнено не будет.
|
|
« Последнее редактирование: 22-07-2013 06:01 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
jifu
Гость
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #5 : 22-07-2013 19:40 » |
|
Странно все это C:\>c.pl 1916 -1568 0.001251220703125 0.563568115234375 0.19329833984375 -3048 0.001251220703125 0.563568115234375 0.19329833984375 -3156 0.001251220703125 0.563568115234375 0.19329833984375 -3532 0.001251220703125 0.563568115234375 0.19329833984375 -4032 0.001251220703125 0.563568115234375 0.19329833984375 -3964 0.001251220703125 0.563568115234375 0.19329833984375 -948 0.001251220703125 0.563568115234375 0.19329833984375 -3920 0.001251220703125 0.563568115234375 0.19329833984375 -1020 0.001251220703125 0.563568115234375 0.19329833984375 -1572 0.001251220703125 0.563568115234375 0.19329833984375 -2748 0.001251220703125 0.563568115234375 0.19329833984375 -4048 0.001251220703125 0.563568115234375 0.19329833984375 -3068 0.001251220703125 0.563568115234375 0.19329833984375 -2600 0.001251220703125 0.563568115234375 0.19329833984375 -2648 0.001251220703125 0.563568115234375 0.19329833984375
|
|
|
Записан
|
|
|
|
jifu
Гость
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #6 : 22-07-2013 19:49 » |
|
А почему тогда с потоками такой бороды нету... Я к тому, что все дело в rand() и srand() #!/usr/bin/perl -w
sub rnd { return rand() }
use threads;
for (1..10) { threads -> new(\ & main);
}
$_ -> join for threads -> list;
sub main
{
while (1) {
print rnd, "\n";
sleep(5);
} } C:\>c.pl 0.8504638671875 0.640350341796875 0.022491455078125 0.49530029296875 0.7867431640625 0.62353515625 0.915008544921875 0.6611328125 0.939178466796875 0.138702392578125 Terminating on signal SIGINT(2)
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #7 : 22-07-2013 23:12 » |
|
jifu, тогда кури ман дальше, обращая особое внимание на thread safe раздел rand и srand - до просветления.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
jifu
Гость
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #8 : 23-07-2013 02:36 » |
|
Да я по учебникам не особо, я это, практик, во... Пусть и говнокод, но понятно чтобы было... ![Я шокирован!](/Smileys/test/shocked.gif)
|
|
|
Записан
|
|
|
|
RXL
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #9 : 23-07-2013 03:50 » |
|
Значить изучать не хочешь, а конкуренцию изучающим составлять хочешь? Нафига оно нам? ![Улыбаюсь](/Smileys/test/smile.gif) Намеки были даны. Задачка элементарна.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
jifu
Гость
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #10 : 24-07-2013 10:04 » |
|
Значить изучать не хочешь, а конкуренцию изучающим составлять хочешь? Нафига оно нам? ![Улыбаюсь](/Smileys/test/smile.gif) Намеки были даны. Задачка элементарна. Да, не, какая там конкуренция... Мне теоретически не ясна разница при распараллеливании задачи, при потоках все пучком, при процессах - неясно. В манах же все на буржуйском, с тех. англ. мы на "ты"...
|
|
|
Записан
|
|
|
|
RXL
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #11 : 24-07-2013 10:34 » |
|
Хрен поймешь, что ты хочешь сказать: то ли ты читаешь английские доки, то ли не читаешь.
Ты и правда не понимаешь? Что у процессов различное, оно же у потоков общее?
Чтобы заниматься практикой надо знать теорию. Иначе ничем хорошим это не кончится.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
jifu
Гость
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #12 : 24-07-2013 13:16 » |
|
Хрен поймешь, что ты хочешь сказать: то ли ты читаешь английские доки, то ли не читаешь. Читаю конечно, как же иначе ориентироваться, другое дело, что там специфика своя, тех. англ. нас в школе не учили, а потом как-то было не до того... Ты и правда не понимаешь? Что у процессов различное, оно же у потоков общее? Да я понял уже намек, все в порядке, RXL. Будем курить маны и штурмовать гугл... Вся беда в том, что по человечески никто не разбирается, один напишет раз в месяц постовой и все у него нещадно дерут и муссируют... В русско-язычной части гугла толку нету. Интереснее, когда смотришь у буржуинов, там и решения дают интересные, да только по ихнему то мы не базлакам, че не ясно, спросить опять не у кого... Чтобы заниматься практикой надо знать теорию. Иначе ничем хорошим это не кончится.
А как же тогда Ломоносов, Эйнштейн из двоек не вылазил... Это чистые практики...
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #13 : 24-07-2013 13:29 » |
|
jifu, чтобы понять разницу между процессами и потоками, нужно искать не примеры на сомнительных сайтах, а вузовские лекции по курсу операционных систем. А затем сделать выводы относительно работы тех или иных системных функций в тех или иных условиях.
Но воспроизводить тексты лекций здесь в теме на форуме - это явно перебор. Сомневаюсь, что тут у нас такой герой найдётся. Поэтому пока ты с этим не разберёшься, здесь предметно говорить вроде бы и не о чем.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
RXL
|
![](/Themes/VU3/images/post/xx.gif) |
« Ответ #14 : 24-07-2013 19:57 » |
|
jifu, если хочется пофлудить, есть раздел общения.
Понимаешь, из твоих слов не понятно ничего: воды много, но по теме ничего. Вроде как ты за помощью пришел. Задачка очень простая, значит тебя нужно направить, а не подсказывать. Подсказок ты не понимаешь. Что прикажешь делать?
Искал в Гугле и не нашел? Значит не то искал. Намек дан несколько раз: твоя задача решается через понимание двух вещей: работы генератора псевдослучайных чисел и основного различия потоков и процессов. Если не можешь понять, то пора менять подход к делу.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|