Lua コードからの HTTP リクエストを処理する必要がある HTTP サーバーがあります。C コードから、この方法で Lua C API を呼び出します (アイデアはhereから来ています)。
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 呼び出しをより高速にするにはどうすればよいでしょうか?