Много поточность в Перл

Статус
В этой теме нельзя размещать новые ответы.

fuck_r1der

Писатель
Заблокирован
Регистрация
23 Июл 2007
Сообщения
77
Реакции
1
  • Автор темы
  • Заблокирован
  • #1
слышал есть много разных вариантов, скриптом нужно сделать паралельно много коннектов к серверу, +как из перл скрипта запускать другие скрипты параллельно?
 
Для этого используется директива fork.
Вот пример, как делается дети от родительского процесса:
PHP:
# set up the socket SERVER, bind and listen ...
use POSIX qw(:sys_wait_h);
sub REAPER {
    1 until (-1 =  = waitpid(-1, WNOHANG));
    $SIG{CHLD} = \&REAPER;                 # unless $]>= 5.002
}
$SIG{CHLD} = \&REAPER;
while ($hisaddr = accept(CLIENT, SERVER)) {
    next if $pid = fork;                    # parent
    die "fork: $!" unless defined $pid;     # failure
    # otherwise child
    close(SERVER);                          # no use to child
    # ... do something
    exit;                                   # child leaves
} continue { 
    close(CLIENT);                          # no use to parent
}
А в детях соотвественно делаешь то, что тебе нужно, например скачиваеш что-то.
Вообще, этот пример из замечательной книги, которую ты можешь скачать по ссылке:

Конкретно смотри в Cookbook 17 раздел.
 
  • Автор темы
  • Заблокирован
  • #3
ага

спасибо конечно, с форком я дулал уже, не понравилось что много проца жрет, насколько я знаю для каждого процесса отельно выделяется буфер памяти опр размера, +нагрузка на проц возрастает:) я слышал про нити(thread) но реально хорошего примера не нашел
 
спасибо конечно, с форком я дулал уже, не понравилось что много проца жрет, насколько я знаю для каждого процесса отельно выделяется буфер памяти опр размера, +нагрузка на проц возрастает:) я слышал про нити(thread) но реально хорошего примера не нашел
треды на перле слегка убогие, плюс их реализация например под фрибсд будет весьма проблематична, под линуксом более менее прилично, но тоже гемморой. для меньшей мороки посоветую на search.cpan.org поискать ForkManager, нагрузка на проц не большая, память сильно потоки не отжирают, и главный плюс - не нужно геммороиться... используется в некоторых моих проектах уже около 3 лет, нареканий пока не вызывал...
 
  • Автор темы
  • Заблокирован
  • #5
спасибо большое попробую, у меня кстати под фрей нити не пашут:D хз почему
 
под фрей нити не пашут
треды на перле слегка убогие, плюс их реализация например под фрибсд будет весьма проблематична, под линуксом более менее прилично, но тоже гемморой
Я слышал, абсолютно точно, не знаю, говорят что нити более Windows технология, и хорошо она работает только в них. Из UNIX`ов нити хорошо работают только на Solaris.
По поводу нитей лучше работающих в Linux, чем во FreeBSD - это актуально только для ядер ветви 2.6, в ветви 2.4 - вообще ужасное глюкало.
с форком я дулал уже, не понравилось что много проца жрет, насколько я знаю для каждого процесса отельно выделяется буфер памяти опр размера
Что-то не ясно почему форки жрут больше процессора, с памятью - да могут быть сложности, но это решаемо. Суть в том что вся память используемая родителем, копируется в детей - поэтому может существовать мнение, что дети много жрут памяти, при грамотном проектировании такой проблемы быть не должно.
Общее резюме - используем fork. Просто это нужно делать грамотно, чтобы не родитель данные в детей передавал, а дети брали только те данные, которые им реально нужны.
p.s. Лично я с нитями никогда не заморачивался, fork - наше все ;)
 
нити - виндошное изобретение. на сипене чтото было про нити, но всё это изврат.
 
  • Автор темы
  • Заблокирован
  • #8
ага, понял уже, по поводу форка, у негодругая модель потоков, где создаются соседние процессы под которые выделяются дополнительные блоки памяти,а при работе с нитями, создаются как бы подпотоки в той эе области памяти:)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху