我有一個HTTP服務器需要處理來自Lua代碼的HTTP請求。從C代碼,我調用一些Lua的C API這樣(的想法來自here):什麼是從C調用Lua的禁食方式?
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luaL_loadfile(L, "some.lua");
lua_pcall(L, 0, 0, 0); /* preload */
lua_getglobal(L, "handle");
lua_pushstring(L, "http_request");
lua_pcall(L, 1, 1, 0);
lua_close(L);
這一串代碼運行每個HTTP請求。在多線程工作環境下,此代碼具有相當的性能成本(從20000tps到100tps)。我想知道是否有更有效的方法來調用C的Lua代碼?
更新
當我註釋掉所有這些Lua的C API調用,我可以做一個20000tps。但是當打開這個API調用時,100tps。當在some.lua(刪除require
調用,只加載一個空的Lua文件)進行一些更改,然後性能達到約15000tps。
因此,至少這些API調用成本約爲5000tps,如何使這個API調用更快?
邑。除了'lua_pcall()'以外的所有功能。 – 2013-06-22 03:03:35
多線程可以共享相同的'lua_State'嗎? – coanor
所有對'lua_State'的'lua_'調用都不能同時發生。這就是每個線程擁有一個Lua狀態的原因。 – Deco