Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Малышев_Сетевое программирование 19.12.18

.pdf
Скачиваний:
1
Добавлен:
21.11.2025
Размер:
896.22 Кб
Скачать

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 с.: ил. – Парал: тит. Англ)