- •Адресация
- •Повторители, мосты, коммутаторы и маршрутизаторы.
- •Эталонная сетевая модель osi. Межуровневые взаимодействия.
- •Физический уровень osi
- •Канальный уровень osi.
- •Сетевой уровень osi
- •Транспортный уровень osi.
- •Прикладной уровень osi.
- •Сеансовый уровень osi.
- •Представительский уровень osi.
- •Ethernet
- •TokenRing
- •FrameRelay
- •Адресация tcp/ip
- •Протокол arp
- •Протокол ip
- •Протокол icmp
- •Протокол udp
- •Протокол tcp
- •Протокол spx
- •NetWareCoreProtocol (ncp)
- •Протокол NetWare Core Packet Burst (ncpb)
- •Протокол sap
- •NetBeui
- •NetBios
- •Протокол smb
- •Основные определения winsock.
- •Сетевые протоколы, поддерживаемые Win32
- •Сокеты Windows
- •Winsock и модель osi
- •Создание сокета для tcp/ip
- •Создание сокетов и адресации для NetBios
- •Серверные api-функции
- •Api-функции клиента
- •Передача данных
- •Завершение сеанса
- •Передатчик для протоколов, не требующих соединения
- •Комплексный ввод-вывод
- •Режимы сокетов
- •Модель Select (Выбор)
- •WsaaSyncSelect
- •WsaEventSelect
- •Модель перекрытого ввода-вывода
- •Модель портов завершения
Модель портов завершения
Наконец мы подошли к последней и, возможно, самой эффективной модели ввода/вывода: перекрытый ввод/вывод с портами завершения. Порт завершения – механизм, доступный в NT ядрах ОС (9x не поддерживают их), позволяющий эффективно управлять потоками. В отличие от всех рассмотренных моделей, «порты завершения» обладают собственным управлением потоков. Как Вы могли заметить, все предыдущие иллюстрации представляли собой что-то типа графиков зависимости от времени. Для этой модели я не делал такого графика и диалога программы с WinSock, т.к. это вряд ли поможет прояснить ситуацию. Вместо этого я изобразил образ самого механизма, который хорошо показывает, что происходит:

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