Bei der Messung und Optimierung der Leistung eines solchen großen Systems von Entitäten sind zwei unterschiedliche Aspekte zu berücksichtigen.
Auf der niedrigen Ebene haben Sie die physische Darstellung Ihrer Entitäten, die sich in der Regel auf die Verwendung effizienter Speicherlayouts wie SoA (Strukturen von Arrays) beschränkt, um die Kosten für das Iterieren und Aktualisieren aller aktiven Entitäten zu senken.
Auf der höheren Ebene haben Sie Entscheidungslogik, allgemeine Spiellogik, KI und Pfadfindung. Dies sind alles Aufgaben, die gemeinsam haben, dass sie nicht mit der gleichen Aktualisierungsrate wie Ihr Rendering ausgeführt werden müssen.
Da Sie eine ungleichmäßige Frame-Zeit erhalten würden, wenn Sie den naiven Ansatz wählen, diese Aufgaben nur alle N Frames auszuführen, ist es in der Regel vorteilhaft, die Kosten über mehrere Frames zu amortisieren.
Wenn die Aufgabe inkrementeller Natur ist, können Sie einen Teil des Algorithmus in jedem Frame ausführen und Teilergebnisse für Ihre Aktualisierungen verwenden.
Wenn die Aufgabe weitgehend monolithisch, aber pro Entität trennbar ist, können Sie diese Aufgabe für eine Teilmenge Ihrer Spielentitäten pro Frame ausführen und im Round-Robin-Verfahren zwischen ihnen wechseln. Dies hat den Vorteil, dass die Komplexität von Dingen wie Pfadfindung und KI reduziert wird, da nicht jeder versucht, gleichzeitig zu handeln.
In dem großen taktischen RTS, an dem ich gearbeitet habe, haben wir uns auf robuste Datenstrukturen konzentriert, um die Darstellung auf niedriger Ebene in den Algorithmen auf hoher Ebene abzufragen und die Nachbarn von Spieleinheiten zu finden. Der Aktualisierungsprozess auf niedriger Ebene wirkte sich auf die Absichten der langsam aktualisierenden Simulation auf hoher Ebene aus und lief am Ende auf eine billige Partikelsimulation hinaus, die sich auf Tausende skalierte.