Среда, 21.08.2019, 17:40
Приветствую Вас, Гость
Главная » 2012 » Август » 28 » Мультиплексированный ввод-вывод часть вторая
11:15
Мультиплексированный ввод-вывод часть вторая

Во-первых, процессу приходится постоянно выполнять

операции ввода-вывода в каком-то произвольном порядке, ожидая, когда его

открытые дескрипторы файла будут готовы для ввода-вывода. Это плохая конструкция

программы. Во-вторых, было бы намного эффективнее, если бы программа

могла засыпать, освобождая процессор для других задач, и просыпаться,

только когда один или несколько файловых дескрипторов становятся доступными

для ввода-вывода.

1 Термин ?главный цикл? (mainloop) должен быть знаком любому, кому приходилось писать

G UI-приложения. Например, приложения GNOME используют главный цикл, предоставляемый

GLib их базовой библиотекой. Главный цикл позволяет отслеживать

и отвечать на несколько событий из одной точки блокировки.

Познакомьтесь с мультиплексированным вводом-выводом.

Мультиплексированный ввод-вывод (multiplexed I/O) позволяет приложению

одновременно фиксироваться на нескольких файловых дескрипторах и получать

уведомления, когда один из них становится доступным для чтения или

записи без блокировки. Таким образом, мультиплексированный ввод-вывод

становится центральной точкой для приложений, сконструированных на основе

приблизительно такого каркаса:

1) мультиплексированный ввод-вывод: сообщи мне, когда любой из этих дескрипторов

файла будет готов для ввода-вывода;

2) заснуть до тех пор, пока один или несколько файловых дескрипторов не будут

готовы;

3) проснуться: какие дескрипторы готовы?

4) обработать все готовые к вводу-выводу дескрипторы файлов без блокировки;

5) вернуться к шагу 1 и начать сначала.

В Linux предусмотрено три решения для мультиплексированного ввода-вывода:

интерфейсы select, poll и epoll. Здесь мы рассмотрим два первых, а последний,

относящийся к более сложным и уникальным для Linux решениям,

мы обсудим в следующей статье .

Просмотров: 318 | Добавил: piligrim | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: