Descargo de responsabilidad: mi tipo de juego favorito de todos los tiempos está basado en texto y escribo esto como un programador de mucho tiempo de un antiguo MUD.
Creo que una pregunta importante que debes hacerte es esta: ¿Necesitas hilos? Entiendo que un juego gráfico probablemente tenga más uso de MT, pero creo que también depende de la mecánica del juego. (También podría valer la pena considerar que con las GPU, las CPU y todos los demás recursos que tenemos hoy en día son mucho más potentes, lo que hace que sus preocupaciones sobre los recursos sean tan problemáticas como podría parecerle; de hecho, 100 objetos son prácticamente cero). También depende de cómo defina 'todos los personajes a la vez'. ¿Quieres decir exactamente al mismo tiempo? No lo tendrá como Peter lo señala con razón, así que todo de una vez es irrelevante en sentido literal; solo aparece de esta manera.
Suponiendo que irá con hilos: definitivamente no debe considerar 100 hilos (y ni siquiera voy a analizar si es demasiado para su CPU o no; me refiero solo a las complicaciones y la practicidad de la misma).
Pero recuerde esto: el enhebrado múltiple no es fácil (como señala Philipp) y tiene muchos problemas. Otros tienen mucha más experiencia (por mucho) que yo con MT, pero yo diría que también sugerirían lo mismo (a pesar de que serían más capaces que yo, especialmente sin práctica de mi parte).
Algunos argumentan que no están de acuerdo con que los hilos no son beneficiosos y algunos argumentan que cada objeto debe tener un hilo. Pero (y de nuevo, todo esto es texto, pero incluso si considera más de un hilo no necesita, y no debe considerarlo para cada objeto), ya que Philipp señala que los juegos tienden a recorrer las listas. Pero, sin embargo, no es solo (como sugiere, aunque me doy cuenta de que solo responde a los parámetros de tan pocos objetos) para tan pocos objetos. En MUD soy programador porque tenemos lo siguiente (y esta no es toda la actividad que ocurre en tiempo real, así que tenlo en cuenta también):
(El número de instancias varía, por supuesto, mayor y menor)
Móviles (NPC, es decir, personaje no jugador): 2614; prototipos: 1360 Objetos: 4457; prototipos: 2281 habitaciones: 7983; prototipos: 7983. Generalmente, cada habitación tiene su propia instancia, pero también tenemos habitaciones dinámicas, es decir, habitaciones dentro de una habitación; o habitaciones dentro de un móvil, por ejemplo, el estómago de un dragón; o habitaciones en objetos, por ejemplo, ingresas un objeto mágico). Tenga en cuenta que estas salas dinámicas existen por objeto / sala / móvil que realmente las tiene definidas. Sí, esto es muy parecido a la idea de instancias de World of Warcraft (no la juego, pero un amigo me hizo jugarla cuando tenía una máquina Windows, por un tiempo), excepto que la tuvimos mucho antes de que existiera World of Warcraft.
Scripts: 868 (actualmente) (curiosamente nuestro comando de estadísticas no muestra cuántos prototipos tenemos, por lo que agregaré eso). Todos estos se llevan a cabo en áreas / zonas y tenemos 103 de ellos. También tenemos procedimientos especiales que se procesan en diferentes momentos. También tenemos otros eventos. Entonces también tenemos enchufes conectados. Los móviles se mueven, realizan diferentes actividades (además del combate), tienen interacciones con los jugadores, etc. (También lo hacen otros tipos de entidades).
¿Cómo manejamos todo esto sin demora?
sockets: select (), colas (entrada, salida, eventos, otras cosas), buffers (entrada, salida, otras cosas), etc. Estos son encuestados 10 veces por segundo.
personajes, objetos, habitaciones, combate, todo: todo en un bucle central en diferentes pulsos.
También (mi implementación basada en la discusión entre el fundador / otro programador y yo) tenemos un extenso seguimiento de listas vinculadas y pruebas de validez del puntero y tenemos más que suficientes recursos gratuitos en caso de que realmente lo necesitemos. Todo esto (excepto que hemos expandido el mundo) existió hace años cuando había menos RAM, potencia de CPU, espacio en el disco duro, etc. Y de hecho, incluso entonces no tuvimos problemas. En los bucles descritos (las secuencias de comandos causan esto al igual que los reinicios / repoblaciones de área al igual que otras cosas) se están creando, liberando, etc., monstruos, objetos (elementos) y otras cosas. Las conexiones también son aceptadas, encuestadas y todo lo demás que cabría esperar.