Поскольку большинство из вас, ребята, говорят, что сервер должен быть заблокирован при использовании ЦП до того, как будет достигнуто 10k одновременных пользователей, я полагаю, что лучше для меня использовать подход потокового блокирующего (N) ввода-вывода, учитывая тот факт, что для этой конкретной MMORPG получение нескольких пакетов в секунду для каждого игрока не является редкостью и может привести к зависанию селектора, если один из них будет использоваться.
Питер затронул интересный момент, заключающийся в том, что блокировка NIO выполняется быстрее, чем в старых библиотеках, хотя неопровержимо упомянул, что для занятого сервера MMORPG было бы лучше использовать потоки из-за того, сколько инструкций получено на игрока. Я бы не рассчитывал, что слишком много игроков будут бездействовать в этой игре, поэтому для меня не должно быть проблемой иметь кучу не работающих потоков. Я пришел к выводу, что синхронизация по-прежнему требуется даже при использовании инфраструктуры, основанной на NIO, поскольку они используют несколько рабочих потоков, работающих одновременно, для обработки пакетов, полученных от клиентов. Переключение контекста может оказаться дорогостоящим, но я попробую это решение. Мой код относительно легко реорганизовать, чтобы я мог использовать инфраструктуру NIO, если обнаружил, что есть узкое место.
Я считаю, что на мой вопрос ответили. Я просто подожду немного больше, чтобы получить еще больше понимания от большего количества людей. Спасибо за все ваши ответы!
РЕДАКТИРОВАТЬ: Я наконец выбрал свой курс действий. На самом деле я был нерешителен и решил использовать JBoss Netty и позволить пользователю переключаться между oio или nio, используя классы
org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
org.jboss.netty.channel.socket.oio.OioServerSocketChannelFactory;
Довольно приятно, что Netty поддерживает оба!