Kann ein Thread nichts anderes tun, während er auf einen Socket wartet, wird mit steigender Spielerzahl alles langsamer.
Warum Für jede Verbindung wird auf Lesen und Schreiben gewartet → Folge Verzögerung einer Verbindung greift auf andere Verbindungen desselben Threads über → Auf dem Bildschirm Je mehr Spieler gleichzeitig online sind, desto stärker Zeitlupe und Input-Lag für alle
Auf asynchrone I/O mit epoll, IOCP oder io_uring umstellen.
Im Graphen
Steigt mit Spielerzahl und Last · Antwortzeit, Thread-Zahl
Wo nachsehen
Mit pidstat -w -t die Zahl der Spielserver-Threads und die freiwilligen Kontextwechsel pro Thread prüfen (cswch/s: wie oft ein Thread anhält, um auf eine Ressource zu warten) und mit der Antwortzeit bei steigender Spielerzahl vergleichen
Spricht dafür
Mit steigender Spielerzahl wächst die Antwortzeit steil, die meisten der mit den Verbindungen vermehrten Threads haben nur viele freiwillige Wechsel und nutzen kaum CPU (warten auf Sockets)
Spricht dagegen
Threads nutzen ohne Wartezeiten ständig CPU: Rechenlast („Überschrittenes Tick-Budget“)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Quellen
epoll(7) — Linux manual pageLinux man-pages I/O-Ereignisbenachrichtigung, die so skaliert, dass viele fd auf einmal überwacht werden können
I/O Completion PortsMicrosoft Windows-Verfahren, das viele asynchrone I/O-Vorgänge mit einem vorab erzeugten Thread-Pool abwickelt
pidstat(1) — Linux manual pagesysstat cswch/s bei -w: freiwillige Kontextwechsel, bei denen ein Thread beim Warten auf Ressourcen selbst anhält, -t: pro Thread