Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Fcntl, создание неблокирующих дескрипторов 
:(
    Опции темы
TDrive
Дата 8.9.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.9.2009

Репутация: нет
Всего: нет



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

выглядит это примерно вот так:
Код

use strict;

my @ParentWrite;
my @ParentRead;
my $quantity = 20;

# тут создаём процессы
for (my $i=0;$i<$quantity;$i++){
    pipe(ChildRead,$ParentWrite[$i]);
    pipe($ParentRead[$i],ChildWrite);
    if(fork()==0){
        while(1){
            syswrite(STDOUT,"child $i - $_ \n") if sysread(ChildRead,$_,1024);
            syswrite(ChildWrite,"yse gotovo");
            }
        }
    }
    
#тут мы их озадачиваем
for (my $i=0;$i<$quantity;$i++){
    syswrite($ParentWrite[$i],"test start");
    }
    
#тут проверяем как они работают и озадачиваем их снова
while(1){
    for (my $i=0;$i<$quantity;$i++){
        syswrite($ParentWrite[$i],"molodca!") if sysread($ParentRead[$i],$_,1024);
    }
}


в таком виде он работает НО syswread() если не может прочитать из дескриптора тормозится пока в дескрипторе не появятся данные.
тоесть скрипт работает потому что все процессы нормально работаю но если один процесс повиснет то главный процесс будет ждать от него ответа.

значит надо массив дескрипторов @ParentRead сделать неблокирующим.
знаю что надо use Fcntl; знаю что делает это fcntl() но вот с параметрами этой функции не могу разобраться.
ну первый параметр это дескриптор а другие 2 параметра вообще тёмный лес.... и описания нигде найти не могу.
может кто помочь разобраться?

(ещё можно вроде через метод blocking() но я стараюсь не использовать модули чтоб самому разобраться как чё работает)

кстате почему больше 64 процессов открыть нельзя?








  

Это сообщение отредактировал(а) TDrive - 8.9.2009, 15:44
PM MAIL   Вверх
TDrive
Дата 9.9.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.9.2009

Репутация: нет
Всего: нет



 smile  smile  smile 
PM MAIL   Вверх
ginnie
Дата 9.9.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



TDrive, может Вам поможет Doing Non-Blocking I/O?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
TDrive
Дата 9.9.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.9.2009

Репутация: нет
Всего: нет



Цитата(ginnie @  9.9.2009,  13:45 Найти цитируемый пост)
TDrive, может Вам поможет Doing Non-Blocking I/O? 

о спасиб то что надо дальше разберусь

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.