По умолчанию в большинстве операционных систем ввод-вывод является блокирующим. Если запрос на чтение или запись некоторых данных не может быть выполнен немедленно, то операционная система переводит программу в состояние ожидания до тех пор, пока вызов не будет выполнен, или вырабатывает сообщение об ошибке. Это не вызывает проблем при выполнении большинства задач программирования, поскольку дисководы, окна терминалов и другие устройства ввода-вывода работают относительно быстро, по крайней мере, с точки зрения человека. Однако, как было показано в предыдущей главе, блокировка затрудняет создание программ для систем клиент/сервер, поскольку единственный заблокированный сетевой вызов может привести к зависанию всей программы и переводу всех прочих запросов в состояние ожидания.
Во избежание таких проблем при операциях чтения или записи можно либо применить несколько параллельно работающих потоков выполнения, как при использовании мультипроцессных и многопоточных серверов, либо использовать функцию select () для определения того, какие дескрипторы файлов готовы к вводу-выводу. Однако последний подход создает другую проблему, поскольку сокет или другой дескриптор файла все равно может быть заблокирован при выполнении функции syswrite (), если будет предпринята попытка записать больше данных, чем он может принять. В этом случае попытка записи блокируется и программа останавливается. Для предотвращения этой ситуации можно использовать неблокирующий ввод-вывод.
2014-07-23 12:53:03
это интересно Многообразие различного видео формата зачастую требует чтобы видео/аудио проигрыватель был универсальным и обладал максимальной функциональностью. Одним из таких является Gom Player http://gom-player.joydownload.ru/ , который был создан еще в 2003 году и с того момента наращивал свой потенциал. Данный плеер поддерживает все основные форматы и отличается стабильной работой и четкой передачей изображения.