Главная » 2016 » Март » 28 » Мультиплексированный ввод-вывод
12:10
Мультиплексированный ввод-вывод
В приложениях часто возникает необходимость фиксироваться на несколькихфайловых дескрипторах, жонглируя вводом-выводом между клавиатурой (входstdm), взаимодействием процессов и несколькими файлами. Современные основанныена событиях приложения с графическим интерфейсом пользователя(graphical user interface, G U I) могут сражаться в своих главных циклах1 буквальнос сотнями ожидающих обработки событий.Без помощи потоков выполнения, которые фактически обслуживают каждыйдескриптор файла отдельно, один процесс не мог бы разумно справляться сфиксацией более чем на одном файловом дескрипторе одновременно. Работатьс несколькими дескрипторами просто, если они всегда готовы к операции чтенияили записи. Но как только встречается дескриптор файла, который еще невозможноиспользовать, — предположим, выполняется системный вызов read(),а данных для считывания еще нет, — процесс блокируется и не может обслужитьдругие файловые дескрипторы. Блокировка может продолжаться несколькосекунд, делая приложение малопроизводительным и раздражая пользователя.А если для данного дескриптора файла доступные данные не появляются, топроцесс может заблокироваться навсегда. Так как ввод-вывод для различныхдескрипторов файла зачастую взаимосвязан — вспомните конвейеры, — вполневозможно, что один файловый дескриптор будет приходить в состояние готовноститолько после обслуживания другого. В частности, это может превращатьсяв большую проблему для сетевых приложений, которые одновременно открываютмножество сокетов.Представьте себе блокировку дескриптора файла, связанного с взаимодействиемпроцессов, пока данные ожидают на входе stdin. Приложение не узнает,что с клавиатуры уже поступили какие-то данные, пока заблокированный файловыйдескриптор в итоге не вернет данные; но что делать, если заблокированнаяоперация никогда ничего не возвращает?Ранее в этой главе мы уже рассмотрели ввод-вывод в режиме без блокировкикак одно из решений этой проблемы. Применяя ввод-вывод без блокировки,приложения могут создавать запросы ввода-вывода, которые вместо блокировкибудут возвращать особое условие ошибки. Однако это решение неэффективнопо двум причинам
Просмотров: 447 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar