Lua 스크립트를 사용하여 MMO 서버의 게임 로직을 정의하면 C ++로 컴파일 된 것보다 훨씬 느려 집니까?


10

내 MMO 서버에 엔터티 시스템을 사용하고 있으며 Lua 스크립트를 사용하여 "동작"동작을 정의하려고합니다. 서버는 C ++로 작성되었습니다. C ++에서 Lua의 속도 / 메모리 사용에 익숙하지 않지만 클라이언트의 GUI를 스크립팅하는 데 사용했습니다. Lua를 사용하여 서버 측에서 게임 로직을 정의하면 성능이 크게 저하됩니까?


답변:


20

TL; DR : Lua에는 오버 헤드가 있지만 올바르게 사용하면 무시할 수 있고 쉽게 완화됩니다. 무거운 수학 연산이나 변형 형상에는 사용하지 마십시오. GUI를 스크립팅하는 데 성능 문제가 전혀 없을 것입니다.

게임 스크립팅 언어로서의 Lua의 성능에 관한 몇 가지 기본 벤치 마크를 수행했으며 매우 빠릅니다. tolua ++를 사용하여 LuaJIT를 게임 엔진에 바인딩하여 2,000 명의 액터를 생성했습니다. 각 액터는 모든 게임 루프 (시간 델타 인수 포함)라는 Lua 스크립트로 제어됩니다. 배우의 절반은 무리를 짓는 대본이 있었고 나머지 절반은 일종의 무작위 걷기를하고있었습니다 (그리고 무리는 피했습니다).

렌더링 구성 요소를 끄면 Opteron 170에서 초당 400 틱 이상이 나왔습니다 (2x2.0GHz, 당시 엔진은 단일 스레드였습니다). 필자가 파고 최적화하면 무거운 작업 중 일부를 C ++로 다시 옮기는 것보다 훨씬 더 많이 짜낼 수 있다고 생각합니다. 초당 400 배의 배우를 업데이트하는 것은 여전히 ​​인상적이며 당시의 기대치를 훨씬 뛰어 넘었습니다.

이제 모든 프로젝트에서 Lua를 사용하고 실제로 실제 게임 코드 (AI, GUI 레이아웃 / 논리, 이벤트 / 메시지)의 상당 부분을 구성합니다. 종료, 재 컴파일 및 재 초기화하지 않고 빠르게 무언가를 변경하고 테스트 할 수있을 때 게임을 만드는 것이 훨씬 재미있어집니다. 때때로 성능 문제가 발생하지만 C ++에서 문제가되는 코드를 다시 구현 한 다음 Lua에서 호출하면 쉽게 해결할 수 있습니다.

주제가 약간 다르지만 EVE Online의 서버는 거의 완전히 Stackless Python으로 작성되었습니다 (나는 대부분의 수학 연산을 C ++ lib로 연기한다고 생각합니다). LuaJIT보다 성능이 훨씬 낮은 벤치 마크. 그들은 너무 많은 문제없이 30k + 동시 플레이어를 처리 할 수 ​​있습니다. 물론, 그들은 모두 고가의 하드웨어를 가지고 있지만 대부분의 비용은 데이터베이스 클러스터에 있다고 생각합니다.

텍스트의 벽에 대한 사과.


1
좋은 대답입니다! 그러한 자세한 답변에 대해 사과 할 필요가 없습니다. Lua에 정의 된 컴포넌트 "액션"을 개발하고 벤치마킹을 수행하는 데 시간이 걸릴 것 같습니다. 감사!
BarakatX2

2
이러한 종류의 시스템에서 가장 큰 히트는 일반적으로 스크립트를 구문 분석하는 것이므로 시작시이를 프론트로드해야합니다.
coderanger

이것은 좋은 지적입니다. 실제로 릴리스를 위해 패키징하기 전에 Lua를 바이트 코드로 컴파일합니다. 이는 측정을 수행하지 않았지만 로딩 시간을 훨씬 단축시킬 수 있습니다.
Codewaffle

나는 동의하지 않는 경향이있다. 일반적인 게임 게임 로직은 실행 시간의 작은 부분이지만 (렌더링은 짐승 임) MMO 서버에서는 훨씬 더 큰 부분이므로 영향이 훨씬 더 클 것입니다. 나는 LUAJit과 C ++에 대한 경험이 있으며 LUAJit은 LUA보다 실질적으로 빠르지 만 C ++보다 훨씬 느립니다 (C ++을 올바르게 코딩한다고 가정). LUAJit의 워크 플로는 훌륭하지만 속도가 빠릅니다. 어떻게 비틀어도 문자열 조회, 동적 유형 및 가비지 콜렉션이있는 테이블의 변수는 가격이 책정됩니다. LUAJit은 .NET보다 느리다고 Nuff는 말했다
Kaj

2

짧은 대답 : 그렇습니다.

긴 대답 : 게임 로직의 양, 실행 량 및 복잡도 및 모든 플레이어에 대해 실행해야하는 경우에 따라 다릅니다. 매우 간단하고 많이 반복하지 않으면 괜찮을 것입니다. 그러나 대부분의 경우 C ++ 대신 LUA를 사용하면 코드가 잘 설계되고 최적화되었다고 가정 할 때 성능이 훨씬 떨어지고 확장 성이 떨어집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.