Модель портов завершения

Наконец мы подошли к последней и, возможно, самой эффективной модели ввода/вывода: перекрытый ввод/вывод с портами завершения. Порт завершения – механизм, доступный в NT ядрах ОС (9x не поддерживают их), позволяющий эффективно управлять потоками. В отличие от всех рассмотренных моделей, «порты завершения» обладают собственным управлением потоков. Как Вы могли заметить, все предыдущие иллюстрации представляли собой что-то типа графиков зависимости от времени. Для этой модели я не делал такого графика и диалога программы с WinSock, т.к. это вряд ли поможет прояснить ситуацию. Вместо этого я изобразил образ самого механизма, который хорошо показывает, что происходит:

Идея в следующем: после создания порта завершения socket’ы могут быть связаны с ним. С этой точки зрения, когда операция перекрытого ввода/вывода завершится, соответствующее уведомление отправляется на порт завершения. На порте есть подобные рабочие потоки, которые заблокированы. При прибытии уведомления порт берет один поток из очереди неактивных потоков и делает его активным. Этот поток обрабатывает поступившее завершенное событие и блокируется на порту.

В порту завершения есть определенное ограничение по количеству потоков, но обычно не все из них активны в одно и тоже время, что позволяет сокращать очередь потоков. Создавая подобный порт, Вы можете указывать, сколько потоков будет активными.

В данной модели нет никакой связи между потоком и соединением. Каждый поток может взаимодействовать с событием, пришедшим на порт. Данную модель не просто реализовать, но реализовав, ее Вы сможете работать с тысячами соединений.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: