Старый поток ввода-вывода для модели клиента или шаблона реактора NIO?

Я пишу серверную сеть для многопользовательской игры. Игра представляет собой ролевую игру, и ее абсолютная максимальная вместимость составляет 2000 игроков, но на практике она будет составлять около 300 игроков, хотя это может быть больше или меньше.В течение долгого времени, каждый раз, когда мне приходилось работать с сетью, в которой участвовало множество клиентов, я придерживался NIO, потому что он не требовал использования сотен потоков. Недавно я наткнулся на презентацию PowerPoint, в которой подробно описывались две модели, и модель «поток-на-клиент» почти показалась превосходящей NIO. Я также нашел места, где говорится, что старый IO может на самом деле превзойти NIO.

PowerPoint можно найти здесь (он немного устарел): http://www.mailinator.com/tymaPaulMultithreaded.pdf.

Я еще не написал никакого контента, поэтому для меня не будет проблемой начать с самого начала, если мне придется изменить весь мой сетевой дизайн. Я не ограничен во времени. Первоначально я разрабатывал реализацию шаблона реактора с помощью NIO (выберите событие, отправьте обработчик для обработки события).

Дополнительную информацию можно найти здесь: http://en.wikipedia.org/wiki/Reactor_pattern

Вся моя реализация реактора предназначена для использования одного потока. Поскольку я читал, что старый IO может работать лучше, это фактически поставило меня перед дилеммой. Я не хочу проектировать сложную систему NIO, которая использует несколько потоков только для того, чтобы в полной мере использовать всю мощь процессора, но меня также пугает мысль о том, что одно приложение может использовать более 300 потоков. Какой дизайн подходит для моей цели? Преимущество потока на клиента заключается в том, что он действительно использует всю мощность ЦП по своей природе, но в то же время он тормозит систему. Не говоря уже о том, что размер стека одного потока занимает много памяти (при умножении на пару сотен раз).Должен ли я придерживаться модели реактора?

Я знаю, что этот вопрос несколько двусмыслен, но я чувствую, что мне нужно задать вопрос специально для моей ситуации, потому что я не смог найти вопрос ни на этом сайте, ни на веб-сайте, посвященном моей проблеме. Был один об игре, но игра была рассчитана на десятки тысяч игроков.

Большое спасибо! Если нужны какие-то разъяснения, спрашивайте!

14
задан Martin Tuskevicius 11 April 2012 в 21:05
поделиться