Я использую систему сущностей для своего MMO-сервера, и я думал об определении поведения «действий» с помощью сценариев Lua. Сервер написан на C ++. Я не очень знаком со скоростью / памятью, используемой Lua в C ++, но я использовал ее для написания сценариев GUI клиента. Будет ли использование Lua для определения игровой логики на стороне сервера значительно снизить производительность?
10
Ответы:
TL; DR: Lua имеет накладные расходы, но при правильном использовании он незначителен и легко смягчается. Не используйте его для тяжелых математических операций или преобразования геометрии. Вы, вероятно, не увидите никаких проблем с производительностью, если будете использовать его для создания сценариев графического интерфейса.
Я сделал несколько базовых тестов производительности Lua как языка сценариев игры, и он чертовски быстр. Используя tolua ++ для привязки LuaJIT к моему игровому движку, я породил 2000 актеров, каждый из которых контролировался сценарием Lua, называемым каждым игровым циклом (с аргументом дельта-времени). У половины актеров был сценарий флокирования, а другая половина выполняла своего рода случайную прогулку (и стая их избегали).
Отключение компонента рендеринга дало мне чуть более 400 тиков в секунду на моем Opteron 170 (2x2,0 ГГц, хотя в то время мой двигатель был однопоточным). Я полагаю, что я мог бы выжать немного больше, чем это, если бы я копался и оптимизировал, возможно перенеся часть тяжелой работы обратно в C ++. Обновление 2000 актеров 400 раз в секунду было довольно впечатляющим и намного превзошло мои ожидания в то время.
Сейчас я использую Lua во всех своих проектах, и он на самом деле составляет довольно большую часть реального игрового кода (AI, макет / логика графического интерфейса, события / сообщения). Создание игр НАМНОГО веселее, когда вы можете быстро что-то изменить и протестировать без необходимости выходить, перекомпилировать и повторно инициализировать. Время от времени я сталкиваюсь с некоторыми проблемами с производительностью, но они легко решаются путем повторной реализации нарушающего кода в C ++ (а затем вызова его из Lua).
Хотя серверы EVE Online немного не по теме, они написаны почти полностью на Stackless Python (я полагаю, что они переносят большинство своих математических операций на библиотеку C ++), что значительно тяжелее, чем Lua, и, основываясь на моих личных исследованиях и нескольких доступных тесты, гораздо менее производительные, чем LuaJIT. Им удается обрабатывать более 30 тысяч одновременно работающих игроков без особых проблем. Конечно, у них есть тонна дорогого оборудования, на котором все это работает, но я полагаю, что большая часть затрат приходится на их кластер баз данных ...
Извинения за стену текста.
источник
Краткий ответ: да, да, будет.
Длинный ответ: это зависит от того, насколько логична игра, насколько она запущена и насколько она сложна, и нужно ли вам ее запускать для каждого игрока. Если это очень просто и не повторяется много раз, вы можете быть в порядке с этим. Но в большинстве случаев использование LUA вместо C ++ даст вам гораздо более низкую производительность и будет плохо масштабироваться, если, конечно, код хорошо спроектирован и оптимизирован.
источник