Ich verwende ein Entitätssystem für meinen MMO-Server und habe darüber nachgedacht, das Verhalten von "Aktionen" mithilfe von Lua-Skripten zu definieren. Der Server ist in C ++ geschrieben. Ich bin nicht sehr vertraut mit der Geschwindigkeits- / Speichernutzung von Lua in C ++, aber ich habe es für die Skripterstellung der GUI des Clients verwendet. Würde die Verwendung von Lua zur Definition der Spielelogik auf der Serverseite die Leistung erheblich beeinträchtigen?
10
Antworten:
TL; DR: Lua hat zwar Overhead, aber wenn es richtig verwendet wird, ist es vernachlässigbar und leicht zu mildern. Verwenden Sie es nicht für schwere mathematische Operationen oder zum Transformieren von Geometrie. Sie werden wahrscheinlich überhaupt keine Leistungsprobleme feststellen, wenn Sie damit eine GUI skripten.
Ich habe einige grundlegende Benchmarks bezüglich Luas Leistung als Spieleskriptsprache durchgeführt, und es ist verdammt schnell. Mit tolua ++, um LuaJIT an meine Spiel-Engine zu binden, habe ich 2.000 Schauspieler hervorgebracht, von denen jeder von einem Lua-Skript gesteuert wird, das jede Spielschleife (mit einem Zeit-Delta-Argument) aufruft. Die Hälfte der Schauspieler hatte ein Flock-Drehbuch und die andere Hälfte machte eine Art zufälligen Spaziergang (und wurde von der Herde gemieden).
Durch das Ausschalten der Rendering-Komponente erhielt ich auf meinem Opteron 170 etwas mehr als 400 Ticks pro Sekunde (2x2,0 GHz, obwohl meine Engine zu diesem Zeitpunkt Single-Threaded war). Ich stelle mir vor, ich hätte einiges mehr herausholen können, wenn ich mich eingegraben und optimiert hätte, um vielleicht einen Teil der schweren Arbeit wieder in C ++ zu verlagern. Das 400-malige Aktualisieren von 2000 Schauspielern pro Sekunde war immer noch ziemlich beeindruckend und hat meine damaligen Erwartungen weit übertroffen.
Ich verwende Lua jetzt in allen meinen Projekten und es macht tatsächlich einen ziemlich großen Teil des tatsächlichen Spielcodes aus (KI, GUI-Layout / Logik, Ereignisse / Nachrichten). Das Erstellen von Spielen macht VIEL mehr Spaß, wenn Sie etwas schnell ändern und testen können, ohne es beenden, neu kompilieren und neu initialisieren zu müssen. Ich habe von Zeit zu Zeit einige Leistungsprobleme festgestellt, die jedoch leicht gelöst werden können, indem der fehlerhafte Code in C ++ erneut implementiert wird (und dann von Lua aufgerufen wird).
Obwohl die Server von EVE Online etwas vom Thema abweichen, sind sie fast vollständig in Stackless Python geschrieben (ich glaube, sie verschieben die meisten ihrer mathematischen Operationen auf eine C ++ - Bibliothek), die erheblich schwerer als Lua ist und auf meinen persönlichen und mehreren verfügbaren Recherchen basiert Benchmarks, weit weniger performant als LuaJIT. Sie schaffen es, mehr als 30.000 gleichzeitige Spieler ohne zu viele Probleme zu behandeln. Zugegeben, sie haben eine Menge teurer Hardware, auf der all das läuft, aber ich glaube, der Großteil der Kosten entfällt auf ihren Datenbankcluster ...
Entschuldigung für die Textwand.
quelle
Kurze Antwort: Ja, ja, das würde es.
Lange Antwort: Es hängt davon ab, wie viel Spiellogik, wie viel es ausgeführt wird und wie komplex es ist und ob Sie es für jeden Spieler ausführen müssen. Wenn es sehr einfach ist und nicht oft wiederholt wird, können Sie damit einverstanden sein. In den meisten Fällen führt die Verwendung von LUA anstelle von C ++ jedoch zu einer wesentlich geringeren Leistung und einer schlechten Skalierung, vorausgesetzt natürlich, der Code ist gut gestaltet und optimiert.
quelle