The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Обобщение используемых моделей ввода/вывода

Стратегии организации ввода-вывода:

  1. Блокируемый I/O - после вызова read/write происходит блокировка до завершения операции, функция завершается только после принятия или передачи блока данных.
  2. Неблокируемый I/0 - функция завершается сразу, если данные не были приняты/отправлены возвращается код ошибки (т.е. нужно вызывать функции I/O в цикле пока не получим положительный результат).
  3. Мультиплексирование через select/poll - опрашиваем список состояния сокетов, перебирая состояния определяем сокеты готовые для приема/передачи. Главный минус - затраты на перебор, особенно при большом числе неактивных сокетов.
    • select - число контролируемых сокетов ограничено лимитом FD_SETSIZE, в некоторых случаях лимит обходится пересборкой программы, в других - пересборкой ядра ОС.
    • poll - нет лимита FD_SETSIZE, но менее эффективен из за большего размера передаваемой в ядро структуры.
  4. Генерация сигнала SIGIO при изменении состояния сокета (ошибка, есть данные для приема, или отправка завершена), который обрабатывает обработчик SIGIO. В классическом виде применение ограничено и трудоемко, подходит больше для UDP.
  5. Асинхронный I/O - описан в POSIX 1003.1b (aio_open, aio_write, aio_read...), функция aio_* завершается мгновенно, далее процесс сигнализируется о полном завершении операции ввода/вывода (в предыдущих пунктах процесс информировался о готовности прочитать или передать данные, т.е. данные еще нужно было принять или отправить через read/write, в aio_* процесс сигнализируется когда данные полностью получены и скопированы в локальный буфер).
  6. Передача данных об изменении состояния сокета через генерацию событий. (специфичные для определенных ОС решения, малопереносимы, но эффективны).


 
17.02.2004 , Источник: http://www.opennet.ru/opennews/art....
Раздел:    Корень / Программисту и web-разработчику / C/C++, сборка, отладка

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:

 Добавить заметку
 Версия для печати
 
 Поиск заметки:
 

Последние заметки
- 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
- 11.05 Настройка беспроводного соединения в Debian GNU/Linux
- 07.05 Использование Google Drive в Linux
- 18.04 Использование нескольких сетевых стеков в Linux
- 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
- 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
- 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
- 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
- 21.03 Настройка DNSSEC в BIND 9.9
- 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
RSS | Следующие 15 записей >>


ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Оформить подписку на год


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList