Luaスクリプトを使用してMMOサーバーのゲームロジックを定義すると、C ++でコンパイルするよりもはるかに遅くなりますか?


10

MMOサーバーにエンティティシステムを使用していて、Luaスクリプトを使用して「アクション」の動作を定義することを考えていました。サーバーはC ++で書かれています。C ++でのLuaの速度/メモリの使用法についてはあまり詳しくありませんが、クライアントのGUIのスクリプト作成に使用しています。Luaを使用してサーバー側でゲームロジックを定義すると、パフォーマンスが大幅に低下しますか?


回答:


20

TL; DR:Luaにはオーバーヘッドがありますが、適切に使用すれば無視でき、簡単に軽減できます。重い演算やジオメトリの変換には使用しないでください。GUIのスクリプトを作成するためにそれを使用しても、パフォーマンスの問題はまったく見られないでしょう。

ゲームスクリプト言語としてのLuaのパフォーマンスに関するいくつかの基本的なベンチマークを実行しましたが、それはかなり速いです。LuaJITをゲームエンジンにバインドするためにtolua ++を使用して、2,000のアクターを生成しました。各アクターは、すべてのゲームループを呼び出すLuaスクリプトによって制御されます(時間デルタ引数を使用)。俳優の半分は群がった台本を持っていて、残りの半分は一種のランダムウォークをしていた(そして群れによって避けられた)。

レンダリングコンポーネントをオフにすると、Opteron 170で毎秒400ティックを少し超える速度が得られました(2x2.0GHz、エンジンは当時はシングルスレッドでした)。私が掘り下げて最適化した場合、それよりもかなり多くを圧迫できたと思います。おそらく、重い作業の一部をC ++に戻しました。2000人の俳優を毎秒400回更新することは、それでもかなり印象的で、当時の私の期待をはるかに超えていました。

現在、すべてのプロジェクトでLuaを使用しており、実際には実際のゲームコード(AI、GUIレイアウト/ロジック、イベント/メッセージ)のかなりの部分を占めています。何かをすばやく変更してテストし、終了、再コンパイル、および再初期化する必要がない場合、ゲームを作成することははるかに楽しくなります。私は時々いくつかのパフォーマンスの問題に遭遇しましたが、問題のあるコードをC ++に再実装することで簡単に解決できます(そしてLuaから呼び出します)。

EVE Onlineのサーバーはやや話題から外れていますが、ほぼ完全にStackless Pythonで記述されています(それらの演算のほとんどはC ++ libに委ねられています)。これはLuaよりもかなり重いです。ベンチマーク、LuaJITよりもはるかに低いパフォーマンス。彼らは何も問題なく30k以上の同時プレイヤーを処理することに成功しました。確かに、これらすべてを実行する高価なハードウェアがたくさんありますが、コストの大部分はデータベースクラスターにあると思います...

テキストの壁の謝罪。


1
正解です。そのような詳細な答えをお詫びする必要はありません。Luaで定義されたコンポーネントの「アクション」を開発し、いくつかのベンチマークを行うために、時間をかけると思います。ありがとう!
BarakatX2

2
これらの種類のシステムの最大のヒットは、通常、スクリプトの解析です。そのため、起動時に必ずフロントローディングしてください。
coderanger、2009

これは良い点です。私は実際にリリース用にパッケージ化する前に自分のLuaをバイトコードにコンパイルします。これにより、測定は行っていませんが、ロード時間がさらに短縮される可能性があります。
Codewaffle

私は反対する傾向があります。通常のゲームゲームロジックは実行時間のごく一部ですが(レンダリングは野獣です)、MMOサーバーではそれがはるかに大きいため、影響ははるかに大きくなります。私はLUAJitとC ++の経験がありますが、LUAJitはLUAよりも実質的に高速ですが、C ++よりもはるかに低速です(C ++を適切にコーディングしている場合)。LUAJitを使用したワークフローは素晴らしいですが、速度的には打撃を受けます。どのように変更しても、文字列ルックアップ、動的型、およびガベージコレクションを含むテーブル内の変数にはコストがかかります。LUAJitは.NETより遅いとナフ氏は言う
Kaj

2

短い答え:はい、そうです。

長い答え:それは、ゲームロジックの量、実行される量、複雑さ、そしてすべてのプレーヤーで実行する必要があるかどうかによって異なります。それが非常に単純で、あまり繰り返されない場合は、問題ないかもしれません。ただし、ほとんどの場合、C ++の代わりにLUAを使用すると、はるかに低いパフォーマンスが得られ、コードが適切に設計および最適化されていると仮定すると、スケーリングが悪くなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.