Haftungsausschluss: Mein Lieblingsspiel aller Zeiten ist textbasiert und ich schreibe dies als langjähriger Programmierer eines alten MUD.
Ich denke, eine wichtige Frage, die Sie sich stellen müssen, ist folgende: Brauchen Sie überhaupt Fäden? Ich verstehe, dass ein Grafikspiel wahrscheinlich mehr MTs verwendet, aber ich denke, es hängt auch von der Spielmechanik ab. (Es ist auch zu bedenken, dass GPUs, CPUs und alle anderen Ressourcen, die wir heute haben, weitaus leistungsstärker sind, was Ihre Bedenken in Bezug auf Ressourcen so problematisch macht, wie es Ihnen erscheinen mag. Tatsächlich sind 100 Objekte praktisch null.) Es hängt auch davon ab, wie Sie "alle Zeichen auf einmal" definieren. Meinen Sie genau zur gleichen Zeit? Sie werden das nicht haben, wie Peter zu Recht betont, also ist alles auf einmal im wörtlichen Sinne irrelevant; es erscheint nur so.
Vorausgesetzt, Sie gehen mit Threads: Sie sollten auf keinen Fall 100 Threads in Betracht ziehen (und ich werde nicht einmal darauf eingehen, ob es zu viel für Ihre CPU ist oder nicht; ich beziehe mich nur auf die Komplikationen und die Praktikabilität davon).
Aber denken Sie daran: Multithreading ist nicht einfach (wie Philipp betont) und hat viele Probleme. Andere haben viel mehr Erfahrung (viel mehr) als ich mit MT, aber ich würde sagen, dass auch sie dasselbe vorschlagen würden (obwohl sie fähiger wären als ich - besonders ohne Übung von meiner Seite).
Einige argumentieren, dass sie nicht einverstanden sind, dass Threads nicht vorteilhaft sind, und andere argumentieren, dass jedes Objekt einen Thread haben sollte. Aber (und wieder ist dies alles Text, aber selbst wenn Sie mehr als einen Thread betrachten, müssen und sollten Sie ihn nicht für jedes Objekt berücksichtigen), wie Philipp darauf hinweist, dass Spiele dazu neigen, durch die Listen zu iterieren. Aber es ist nicht nur (wie er andeutet, obwohl mir klar ist, dass er nur auf Ihre Parameter von so wenigen Objekten reagiert) für so wenige Objekte. Im MUD bin ich ein Programmierer, denn wir haben Folgendes (und dies ist nicht alles, was in Echtzeit geschieht, denken Sie also auch daran):
(Die Anzahl der Instanzen variiert natürlich - höher und niedriger)
Mobiles (NPC, dh Nicht-Spieler-Charakter): 2614; Prototypen: 1360 Objekte: 4457; prototypen: 2281 zimmer: 7983; Prototypen: 7983. Jeder Raum hat normalerweise seine eigene Instanz, aber wir haben auch dynamische Räume, dh Räume innerhalb eines Raumes; oder Räume in einem Handy, zB der Magen eines Drachen; oder Räume in Objekten (zB wenn Sie ein magisches Objekt betreten). Beachten Sie, dass diese dynamischen Räume pro Objekt / Raum / Mobiltelefon vorhanden sind, für das sie tatsächlich definiert wurden. Ja, dies ähnelt sehr der Idee von World of Warcraft (ich spiele es nicht, aber ein Freund ließ mich es spielen, als ich eine Weile einen Windows-Computer hatte), mit der Ausnahme, dass wir es hatten, lange bevor es World of Warcraft überhaupt gab.
Skripte: 868 (derzeit) (seltsamerweise zeigt unser Statistik-Befehl nicht an, wie viele Prototypen wir haben, also werde ich das hinzufügen). Alle diese Veranstaltungen finden in Gebieten / Zonen statt, von denen wir 103 haben. Wir haben auch spezielle Verfahren, die zu unterschiedlichen Zeiten ablaufen. Wir haben auch andere Veranstaltungen. Dann haben wir auch Steckdosen angeschlossen. Handys bewegen sich, üben verschiedene Aktivitäten aus (außer Kämpfen), haben Interaktionen mit Spielern und so weiter. (So auch andere Arten von Entitäten).
Wie gehen wir ohne Verzögerung damit um?
Sockets: select (), Warteschlangen (Eingabe, Ausgabe, Ereignisse usw.), Puffer (Eingabe, Ausgabe usw.) usw. Diese werden 10-mal pro Sekunde abgefragt.
Charaktere, Objekte, Räume, Kämpfe, alles: alles in einer zentralen Schleife mit verschiedenen Impulsen.
Wir haben auch (meine Implementierung basiert auf einer Diskussion zwischen dem Gründer / anderen Programmierer und mir) umfangreiche Nachverfolgungs- und Zeigergültigkeitstests für verknüpfte Listen und wir haben mehr als genug freie Ressourcen, falls wir tatsächlich einen Bedarf dafür haben. All dies (mit der Ausnahme, dass wir die Welt erweitert haben) gab es vor Jahren, als es weniger RAM, CPU-Leistung, Festplattenspeicher usw. gab. Und selbst dann hatten wir keine Probleme. In den beschriebenen Loops (Skripte verursachen dies, ebenso wie das Zurücksetzen / Wiederauffüllen von Bereichen und andere Dinge) werden Monster, Objekte (Gegenstände) und andere Dinge erstellt, befreit und so weiter. Verbindungen werden ebenfalls akzeptiert, abgefragt und alles andere, was Sie erwarten würden.