Я недавно сделал нечто подобное и решил использовать один lua_State
. Я специально загрузил каждый файл скрипта в его собственную среду с помощью значения _ENV
(генерируя новую среду для каждого в качестве копии глобальной среды). Таким образом, имена не будут конфликтовать, и я считаю, что вы можете запустить несколько сценариев параллельно, если вам это нужно по какой-либо причине.
Это работает для моих целей, так как мне нужно получить доступ ко всем функциям во всех загруженных скриптах в основном в произвольном порядке и в любое время, но если все, что вам нужно, это запустить их один раз, тогда вы можете просто загрузить и выполнить их последовательно в одном и том же lua_State.
Редактировать: Я заметил, что на самом деле упустил суть вопроса. Ответ: использование одного lua_State будет быстрее, если вам нужно загрузить какие-либо стандартные библиотеки (заметные накладные расходы). Если вы запускаете каждый скрипт только один раз, когда вам не нужно использовать lua_dump/lua_load
, просто сделайте что-то вроде luaL_dofile
, затем lua_pcall
в функции ввода, а затем продолжайте (т.е. загружайте следующий файл).