Порты завершения ввода-вывода. Вопрос по архитектуре
От: haltsys2005  
Дата: 18.07.14 09:09
Оценка:
Коллеги, добрый день. Я давно знаю про концепцию IOCP, но тут начал изучать ее более детально и возникли некоторые вопросы.
Насколько я понимаю для построения высокопроизводительных серверов, работающих с большой нагрузкой, существует две основные концепции :
-каждому клиенту свой рабочий поток
-пул потоков
IOCP — это как раз второй вариант.
При этом везде рассматриваются простенькие примеры, но очень мало примеров по-настоящему приближенных к реальности.
Насколько я понял, основной принцип написания потока, который будет обрабатывать завершения ввода-вывода состоит в том, что длительный процесс со сложной логикой обработки клиентского запроса нужна разбить на некие микро-операции, т.е. фактически реализовать что-то похожее на машину состояний.
Причем разные стейты для одного и того же клиента будут обрабатывать разные потоки из пула. Если был уже реализован сервер по первому варианту (каждому клиенту- свой поток), то просто взять логику обработки в потоке и перенести это в поток обработки завершения ввода -вывода для архитектуры по варианту с IOCP не получится. И в этом основная сложность.
Попутно возникает вопрос , что делать ,если ранее сервер из варианта 1, обращался к каким-то плагинам, к каким-то DLL ?
Их логика построения и архитектура не были изначально заточены под архитектуру машины с конечным числом состояний, если их использовать один в один без изменений, то они "сломают" всю архитектуру и идеологию работы с пулом потоков. Получается их тоже нужно портировать под эту идеологию. А если исходников к ним нет ?
Надеюсь, люди ,глубоко понимающие вопрос, поймут меня.
Поправьте меня, если я не прав.
Если можно , дайте ссылки на книги, на статьи, на форумы где этот вопрос разбирается подробно .
Надеюсь на помощь опытных коллег.
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.