Saya menggunakan sistem entitas untuk server MMO saya dan saya berpikir tentang mendefinisikan perilaku "tindakan" menggunakan skrip Lua. Server ditulis dalam C ++. Saya tidak terlalu terbiasa dengan kecepatan / penggunaan memori Lua di C ++ tapi saya telah menggunakannya untuk skrip GUI klien. Apakah menggunakan Lua untuk mendefinisikan logika permainan di sisi server akan memangkas kinerja banyak?
10
Jawaban:
TL; DR: Lua memang memiliki overhead, tetapi jika digunakan dengan benar itu dapat diabaikan dan mudah dimitigasi. Jangan menggunakannya untuk operasi matematika berat atau mengubah geometri. Anda mungkin tidak akan melihat masalah kinerja sama sekali menggunakannya untuk skrip GUI.
Saya telah melakukan beberapa tolok ukur dasar mengenai kinerja Lua sebagai bahasa scripting game, dan itu sangat cepat. Menggunakan tolua ++ untuk mengikat LuaJIT ke mesin gim saya, saya menelurkan 2.000 aktor, masing-masing aktor dikendalikan oleh skrip Lua yang disebut setiap loop game (dengan argumen time-delta). Setengah dari aktor memiliki naskah yang berkelompok dan setengah lainnya melakukan semacam jalan acak (dan dihindari oleh kawanan).
Mematikan komponen rendering memberi saya sedikit lebih dari 400 kutu per detik pada Opteron 170 saya (2x2.0GHz, meskipun mesin saya berulir tunggal pada saat itu). Saya membayangkan saya bisa memeras lebih dari itu jika saya menggali dan mengoptimalkan, mungkin memindahkan beberapa pekerjaan berat kembali ke C ++. Memperbarui 2.000 aktor 400 kali per detik masih cukup mengesankan, dan jauh melebihi harapan saya saat itu.
Saya sekarang menggunakan Lua di semua proyek saya, dan itu sebenarnya merupakan bagian yang cukup besar dari kode permainan yang sebenarnya (AI, tata letak / logika GUI, Acara / Pesan). Membuat game JAUH lebih menyenangkan ketika Anda dapat dengan cepat mengubah sesuatu dan mengujinya tanpa harus keluar, mengkompilasi ulang, dan menginisialisasi ulang. Saya telah mengalami beberapa masalah kinerja dari waktu ke waktu, tetapi itu mudah dipecahkan dengan menerapkan kembali kode yang menyinggung di C ++ (dan kemudian memanggilnya dari Lua).
Sementara sedikit di luar topik, server EVE Online ditulis hampir sepenuhnya dalam Stackless Python (saya percaya mereka menunda sebagian besar operasi matematika mereka ke C ++ lib), yang jauh lebih berat daripada Lua, dan, berdasarkan penelitian pribadi saya sendiri dan beberapa tersedia tolok ukur, jauh lebih sedikit performanya daripada LuaJIT. Mereka berhasil menangani 30k + pemain bersamaan tanpa terlalu banyak masalah. Memang, mereka memiliki satu ton perangkat keras mahal yang menjalankan semua itu, tapi saya percaya sebagian besar biayanya adalah dalam kelompok basis data mereka ...
Permintaan maaf untuk dinding teks.
sumber
Jawaban singkat: Ya, ya itu akan.
Jawaban panjang: Tergantung pada seberapa banyak logika game, seberapa banyak dijalankan, dan seberapa kompleksnya, dan jika Anda perlu menjalankannya untuk setiap pemain. Jika sangat sederhana dan tidak banyak diulang, Anda mungkin baik-baik saja dengan itu. Tetapi untuk sebagian besar kasus menggunakan LUA, bukan C ++ akan memberikan Anda kinerja yang jauh lebih rendah dan skala akan buruk, dengan asumsi tentu saja bahwa kode dirancang dengan baik dan dioptimalkan.
sumber