Малышев_Сетевое программирование 19.12.18
.pdf
91
APC может быть немного трудным для понимания, но это не страшно. Обычно поток находится в состоянии ожидания до тех пор, пока не будет вызвана процедура отзыва, которая обрабатывает событие о завершении WinSock-функции и возвращает управление программе. Потом главный поток производит необходимые операции (если нужно) и возвращается в состояние ожидания снова.
7.12. ПЕРЕКРЫТЫЙ ВВОД/ВЫВОД: ПОРТЫ ЗАВЕРШЕНИЯ
(COMPLETION PORT)
Последняя и, возможно, самая эффективная модель ввода/вывода - перекрытый ввод/вывод с портами завершения. Порт завершения – механизм, доступный в NT-ядрах ОС (9x не поддерживают их), позволяющий эффективно управлять потоками, – это средство, повышающее производительность приложений, часто использующих операции ввода/вывода. Порты завершения ввода/вывода, поддерживаемые лишь на NT-платформах, объединяют в себе возможности перекрытого ввода/вывода и независимых потоков и используются чаще всего в серверных программах.
В отличие от всех рассмотренных моделей, «порты завершения» обладают собственным управлением потоков. Изобразим образ самого механизма, который хорошо показывает, что происходит [12]:
уведомление |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
порт |
|
|
|
поток |
|
|
|
поток |
|
|
|
поток |
|
|
|
поток |
|
|
|
|
|
|
завершения |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
очередь неактивных рабочих рабочий рабочий потоков, готовых стать активными поток поток
активные рабочие потоки
Рис. 20. Перекрытый ввода/вывод: порты завершения
После создания порта завершения socket’ы могут быть связаны с ним. Когда завершится операция перекрытого ввода/вывода, соответствующее уведомление отправляется на порт завершения. На нем есть подобные рабочие потоки, которые заблокированы. При поступлении уведомления порт берет один поток из очереди неактивных потоков и делает его активным. Этот поток обрабатывает поступившее завершенное событие и блокируется на порту.
В порту завершения есть определенное ограничение по количеству потоков, но обычно не все из них активны в одно и тоже время, что позво-
92
ляет сокращать очередь потоков. Создавая подобный порт, можно указать, сколько потоков будет активными.
В данной модели нет никакой связи между потоком и соединением. Каждый поток может взаимодействовать с событием, пришедшим на порт. Данную модель сложно реализовать, однако она позволяет работать с тысячами соединений.
7.13. ИСПОЛЬЗОВАНИЕ МОДЕЛЕЙ ВВОДА – ВЫВОДА В WINSOCK-
ПРОГРАММИРОВАНИИ.
Здесь пойдет речь об использовании моделей ввода-вывода в программировании Winsock-приложений. Winsock предоставляет возможность управления режимами и модели ввода-вывода сокета, для того чтоб определить как операции ввода-вывода будут обработаны. Режим сокета в сущности определяет поведение вызванных Winsock-функций. Модель ввода-вывода в свою очередь определяет, как приложение будет обрабатывать операции ввода-вывода для определённого сокета [13].
Winsock предоставляет два режима для сокетов: блокирующий и неблокирующий, а также несколько интересных моделей ввода-вывода, которые помогают приложениям в управлении операциями ввода-вывода нескольких сокетов одновременно асинхронным способом: блокирование, select, WSAAsyncSelect, WSAEventSelect, перекрытый ввод-вывод (overlapped I/O), и порт завершения (completion port). Все Windows плат-
формы предоставляют блокирующий и неблокирующий режим работы для сокетов. И всеже не все модели ввода-вывода доступны на всех платформах. Следующая таблица показывает доступность моделей на разных Windows платформах.
Таблица 4
Доступные модели ввода-вывода сокетов
Платформа |
Блокирующий |
Неблокирующий |
|
Select |
|||
Windows CE |
Да |
Да |
|
Windows |
Да |
Да |
|
95(Winsock 1) |
|||
|
|
||
Windows |
Да |
Да |
|
95(Winsock 2) |
|||
|
|
||
Windows 98 |
Да |
Да |
|
Windows МЕ |
Да |
Да |
|
Windows NT |
Да |
Да |
|
Windows 2000 |
Да |
Да |
|
Windows XP |
Да |
Да |
WSAAsync |
WSAEvent |
Over- |
Completion |
Select |
Select |
lapped |
Port |
Нет |
Нет |
Нет |
Нет |
Да |
Нет |
Нет |
Нет |
|
|
|
|
Да |
Да |
Да |
Нет |
|
|
|
|
Да |
Да |
Да |
Нет |
Да |
Да |
Да |
Нет |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
93
СПИСОК ЛИТЕРАТУРЫ
1.https://ru.wikipedia.org/wiki Программирование_сетевых_задач
2.http://ndo.sibsutis.ru/magistr/courses_work/ktnp_work2/Раздел 4 Со-
кеты.mht
3.http://www.interface.ru/home.asp?artid=22678 Использование соке-
тов в Delphi. Часть первая: стандартные сокеты (исходники)
https://bstudy.net/650749/informatika/otobrazhenie_domennyh_imen_adpeca
5.http://handynotes.ru/2009/09/uri-url-urn.html
6.http://it.kgsu.ru/DelInt/DfIn_026.html
7.http://topuch.ru/2-tehnicheskaya-podderjka/index2.html
8.http://www.conlex.kz/gruppovaya-rassylka-v-internete-i-gruppy-
rassylki/
9.Эндрю Кровчик, Винод Кумар, Номан Лагари, Аджит Мунпихе, Кристиан Нагел, Тим Паркер, Шриниваса Шивакумар. .NET. Сетевое программирование для профессионалов. Cop\ right © 2002 Wrox Press, Published by Wrox Press Ltd., Arden House, 1102 Warwick Road, Acocks Green, Birmingham, B27 6BH, United Kingdom, Printed in the United States ofAmerica. ISBN 1-86100-735-3. Переводчик Вл. Стрельцов. Научный редактор Н. Смольянинов. © Издательство "Лори", 2005
http://www.seoliga.ru/category/borland_delphi/mnogoadresnaya_rassylka.shtml
11.http://www.conlex.kz/protokol-igmp/
12.http://www.vr-online.ru/content/setevoe-programmirovanie-chast-2- modeli-vvoda-vyvoda-4343
13.https://club.shelek.ru/viewart.php?id=153
14.http://programming-lang.com/ru/comp_programming/grigorev/0/
j180.html
15.http://programming-lang.com/ru/comp_programming/grigorev/0/
j147.html
16.http://www.studfiles.ru/preview/3988471/
17.http://cppstudio.com/post/9384/
18.http://limn5.narod.ru/c/1-3.html
19.http://coollib.com/b/132026/read
20.http://www.computista.ru/041000.shtml
21.http://www.sql.ru/forum/842083/kod-obyasnite-stroki
22.https://www.intuit.ru/studies/courses/640/496/lecture/11258?page=6
23.https://habr.com/post/141021/
94
24. http://www.net4me.net/docs/pdf/Develop/linux_make_netservice_rubook.pdf (Уолтон, Шон.Создание сетевых приложений в среде Linux. : Пер. с англ.– М. : Издательский дом "Вильяме", 2001. – 464 с.: ил. – Парал: тит. Англ)
