Мое графическое представление и интерпретация моделей на основе сокетов - PullRequest
0 голосов
/ 12 ноября 2010

http://img600.imageshack.us/img600/3567/graphicrepresentation.png

Правильно ли я рассуждаю? Если да, то может ли кто-нибудь показать мне, как на схеме выше, как будут работать Порты завершения ввода / вывода ? Прежде чем я начну изучать создание высокопроизводительных серверов, таких как серверы для MMORPG, я хочу точно знать, как все это работает.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

С IOCP все ваши вызовы send и recv обрабатываются пулом потоков (обычно небольшой пул), поэтому нарисуйте один прямоугольник с send / recv в нем, над ним 3 красные точки и 10 000 синих под ним.

С IOCP вы отправляете серию перекрывающихся запросов. По завершении этих запросов они помещаются в очередь (IOCP), и потоки, обслуживающие эту очередь, могут их удалять и обрабатывать. Таким образом, если у вас есть 10 000 подключений, все из которых ожидают одно чтение, тогда, когда данные поступают от каждого клиента, вы получите завершения чтения, поступающие в IOCP. Ваши потоки будут разбужены и будут иметь дело с завершениями, они, скорее всего, будут выполнять больше перекрывающихся операций чтения и, вероятно, также будут создавать перекрывающиеся записи. Большую часть времени вас не волнует, когда перекрывающиеся записи завершены (за исключением случаев, когда вы заботитесь о них;)), и поэтому обработка завершения просто состоит из освобождения данных за операцию (то есть данных, которые вы только что отправили клиенту) и уменьшения использования рассчитывать на соединение ...

Статьи, ссылки на которые есть на моей бесплатной платформе IOCP-сервера , объясняют это немного подробнее.

2 голосов
/ 12 ноября 2010

Об этом есть статья доктора Доббса .

...