Отказ от ответственности: мой самый любимый тип игр - текстовый, и я пишу это как давний программист старого MUD.
Я думаю, что важный вопрос, который вы должны задать себе, заключается в следующем: вам даже нужны темы? Я понимаю, что графическая игра, вероятно, больше использует МТ, но я думаю, что это также зависит от механики игры. (Возможно, также стоит учесть, что с графическими процессорами, процессорами и всеми другими имеющимися у нас сегодня ресурсами гораздо мощнее, что делает ваши проблемы с ресурсами столь же проблематичными, как вам может показаться; в действительности, 100 объектов практически равны нулю). Это также зависит от того, как вы определяете «все символы одновременно». Вы имеете в виду в одно и то же время? У вас этого не будет, как справедливо указывает Питер, так что все сразу не имеет значения в буквальном смысле; это только кажется таким.
Предполагая, что вы будете использовать потоки: вам определенно не следует рассматривать 100 потоков (и я даже не собираюсь вдаваться в подробности, слишком ли это много для вашего процессора или нет; я имею в виду только сложности и практичность этого).
Но помните: многопоточность не легка (как указывает Филипп) и имеет много проблем. У других гораздо больше опыта (чем у меня), чем у МТ, но я бы сказал, что они тоже предложили бы то же самое (даже если бы они были более способными, чем я, особенно без практики с моей стороны).
Некоторые утверждают, что они не согласны с тем, что потоки не выгодны, а некоторые утверждают, что каждый объект должен иметь поток. Но (и опять же, это весь текст, но даже если вы рассматриваете более одного потока, вам не нужно - и не следует - рассматривать его для каждого объекта), как указывает Филипп, игры имеют тенденцию проходить по спискам. Но все же это не только (как он предлагает, хотя я понимаю, что он реагирует только на ваши параметры стольких объектов) для стольких объектов. В MUD я программист, потому что у нас есть следующее (и это не все действия, которые происходят в режиме реального времени, так что имейте это в виду):
(Количество экземпляров, конечно, различается - все выше и ниже)
Мобильные телефоны (NPC, т.е. неигровые персонажи): 2614; прототипы: 1360 объектов: 4457; прототипов: 2281 номеров: 7983; прототипы: 7983. У каждой комнаты обычно есть свой экземпляр, но у нас также есть динамические комнаты, то есть комнаты внутри комнаты; или комнаты внутри мобильного телефона, например, живот дракона; или комнаты в объектах, например, вы вводите волшебный объект). Имейте в виду, что эти динамические комнаты существуют для каждого объекта / комнаты / мобильного телефона, который фактически определил их. Да, это очень похоже на идею World of Warcraft (я не играю в нее, но мой друг заставлял меня играть на ней, когда я какое-то время работал на машине с Windows), за исключением того, что у нас это было задолго до появления World of Warcraft.
Скрипты: 868 (в настоящее время) (как ни странно, наша команда статистики не показывает, сколько у нас прототипов, поэтому я добавлю это). Все они проводятся в областях / зонах, и у нас их 103. У нас также есть специальные процедуры, которые выполняются в разное время. У нас также есть другие события. Тогда мы также подключили розетки. Мобильные телефоны передвигаются, выполняют различные действия (помимо боя), взаимодействуют с игроками и так далее. (То же самое делают другие типы организаций).
Как мы справимся со всем этим без промедления?
сокеты: select (), очереди (вход, выход, события, другие вещи), буферы (вход, выход, другие вещи) и т. д. Они опрашиваются 10 раз в секунду.
персонажи, предметы, комнаты, бои, все: все в центральном цикле на разных импульсах.
Мы также (моя реализация, основанная на обсуждении между основателем / другим программистом и мной) провели обширное отслеживание связанного списка и проверку достоверности указателей, и у нас более чем достаточно свободных ресурсов, если мы действительно в этом нуждаемся. Все это (за исключением того, что мы расширили мир) существовало годы назад, когда было меньше оперативной памяти, мощности процессора, места на жестком диске и т. Д. И действительно, даже тогда у нас не было проблем. В описанных циклах (сценарии вызывают это так же, как и перезагрузка области / повторное заполнение, как и другие вещи), монстры, объекты (предметы) и другие вещи создаются, освобождаются и так далее. Соединения также принимаются, опрашиваются и все остальное, что вы ожидаете.