Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Рабочие потоки или порты завершения ввода/вывода 07.11.05 12:13 Число просмотров: 2033
Автор: amirul <Serge> Статус: The Elderman
|
> Да, если требуется длительная обработка запросов - это > недостаток такого подхода. Впрочем вполне преодолимый путем > запуска по необходимости дополнительных потоков которые > асинхронно обрабатывают все и отправляют ответы в сокеты. > Этакий гибридный подход. Потоков получится меньше чем > сокетов, и все будет работать без задержек. Но сделать чтоб > все это нормально работало задача очень нетривиальная.
Worker threads придется реализовывать самому. Создается пул потоков, очередь обработки (защищенная мьютексом). Все эти потоки становятся в ожидание одного синхронизирующего (с самосбросом) event-а. Когда необходимо выполнить некую работу, основной поток заполняет структуру, в которой есть все данные, необходимые для выполнения этой работы, вставляет ее в очередь и сигналит event. Первый из ожидающих потоков просыпается, блокирует мьютексом очередь обработки, забирает из очереди свое задание (с удалением его из очереди), разблокирует очередь и начинает спокойно выполнять задание.
Ну а в IoCompletion объектах (в win32 Completion Ports) это все уже реализовано (только в NT, но не думаю, что кто-то станет писать высокопроизводительный сервер с прицелом на 9x).
http://msdn.microsoft.com/library/en-us/fileio/base/i_o_completion_ports.asp
Ну и несколько полезных ссылок (с примерами)
http://msdn.microsoft.com/library/en-us/dndllpro/html/msdn_servrapp.asp
http://msdn.microsoft.com/library/en-us/dndllpro/html/msdn_scalabil.asp
http://msdn.microsoft.com/msdnmag/issues/1000/winsock/default.aspx
|
|
|