![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
DooZ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
есть скрипт:
суть в следующем все прекрастно работает, НО родительский процесс висит по комманде top со 100% нагрузкой на процессор я понимаю что вот в этом куске все дело: while(1) { my $status=waitpid(-1,&WNOHANG); $forks-- if $status>0; last if $status<=0; } т.е. он грузит НО! если поставить например sleep(1) теряется скорость, т.е. процессы порождаются каждую секунду это не верно и долго! помогите как быть? заранее сенькс Это сообщение отредактировал(а) DooZ - 25.1.2007, 17:27 |
|||
|
||||
DooZ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
неужели никто не сталкивался с такой проблемой?
может предложите иной способ юзания форка что бы не было нагрузки от родительского процесса? |
|||
|
||||
Ivan Kolesnikov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: 3 Всего: 6 |
DooZ, я делал следующим образом: имеется PIPE в который дочернии потоки могут писать, а основной может читать. При этом дочерний поток при своем завершении записывает в PIPE какую-нибудь строку (например свой PID, но в принципе в данном случае это не важно). Основной поток с цикле создает максимальное число потоков, а после этого начинает читать из PIPE, как только он прочитал очередную строку значит один из потоков завершился, и можно создать еще один. Так делаем до тех пор пока есть данные для обработки после того как их не стало надо дождаться завершения работы дочерних потоков для этого мы делаем цикл по числу созданных потоков (их число в данный момент равно максимальному) и на каждой итерации читаем из PIPE очередную строку.
В общем вот так, почитать про PIPE и вообще про межпроцессорное взаимодейсвие можно так: perl perlipc Если не понятно, то распишу поподробнее... --------------------
|
|||
|
||||
DooZ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
сенькс за ответ
но я решил все этим модулем: Parallel::ForkManager очень удобная вещь |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |