Lua和C++之間調用效率測試
(金慶的專欄 2017.8)
仿照 http://www.cnblogs.com/archy_yu/p/3185608.html 對 Lua 和 C++ 調用進行測試。
代碼見:https://github.com/jinq0123/TimerLuaIntf
使用 LuaIntf 綁定 Lua 和 C++。用 boost timer 計時。
依賴庫 lua-cpp, lua-intf, boost-timer 用 conan 安裝。
conan 會下載源碼,編譯,然后生成 conanbuildinfo.props 給 VS 導入,
其中設好了所有 include, lib 目錄,鏈接庫,運行庫。
代碼大概如下:
cout << "C++ calls lua add() many times:\n";
{
boost::timer::auto_cpu_timer t;
for (int i = 0; i < COUNT; ++i)
test.dispatchStatic("add", 123, 456);
}
cout << "C++ calls lua add_times() once:\n";
{
boost::timer::auto_cpu_timer t;
test.dispatchStatic("add_times", 123, 456, COUNT);
}
cout << "Lua calls C++ add() many times:\n";
{
boost::timer::auto_cpu_timer t;
test.dispatchStatic("test_c_add", 123, 456, COUNT);
}
cout << "Lua calls C++ add_times() once:\n";
{
boost::timer::auto_cpu_timer t;
test.dispatchStatic("test_c_add_times", 123, 456, COUNT);
}
測試4種調用:
* C++ 調用 1kw 次 lua add()
* C++ 調用 1 次 lua add_times(), 其中調用 add() 1kw 次
* Lua 調用 C++ add() 1kw 次
* Lua 調用 C++ add_times() 1 次,其中調用 add() 1kw 次
輸出如:
C++ calls lua add() many times:
2.759473s wall, 2.761218s user + 0.000000s system = 2.761218s CPU (100.1%)
C++ calls lua add_times() once:
0.436400s wall, 0.436803s user + 0.000000s system = 0.436803s CPU (100.1%)
Lua calls C++ add() many times:
0.535802s wall, 0.530403s user + 0.000000s system = 0.530403s CPU (99.0%)
Lua calls C++ add_times() once:
0.000005s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
結論是:
* C++ 調用 Lua 可達 3百萬次/s
* Lua 內部調用函數可達 2千萬次強/s
* Lua 調用 C++ 函數可達 2千萬次弱/s
(金慶的專欄 2017.8)
仿照 http://www.cnblogs.com/archy_yu/p/3185608.html 對 Lua 和 C++ 調用進行測試。
代碼見:https://github.com/jinq0123/TimerLuaIntf
使用 LuaIntf 綁定 Lua 和 C++。用 boost timer 計時。
依賴庫 lua-cpp, lua-intf, boost-timer 用 conan 安裝。
conan 會下載源碼,編譯,然后生成 conanbuildinfo.props 給 VS 導入,
其中設好了所有 include, lib 目錄,鏈接庫,運行庫。
代碼大概如下:
cout << "C++ calls lua add() many times:\n";
{
boost::timer::auto_cpu_timer t;
for (int i = 0; i < COUNT; ++i)
test.dispatchStatic("add", 123, 456);
}
cout << "C++ calls lua add_times() once:\n";
{
boost::timer::auto_cpu_timer t;
test.dispatchStatic("add_times", 123, 456, COUNT);
}
cout << "Lua calls C++ add() many times:\n";
{
boost::timer::auto_cpu_timer t;
test.dispatchStatic("test_c_add", 123, 456, COUNT);
}
cout << "Lua calls C++ add_times() once:\n";
{
boost::timer::auto_cpu_timer t;
test.dispatchStatic("test_c_add_times", 123, 456, COUNT);
}
測試4種調用:
* C++ 調用 1kw 次 lua add()
* C++ 調用 1 次 lua add_times(), 其中調用 add() 1kw 次
* Lua 調用 C++ add() 1kw 次
* Lua 調用 C++ add_times() 1 次,其中調用 add() 1kw 次
輸出如:
C++ calls lua add() many times:
2.759473s wall, 2.761218s user + 0.000000s system = 2.761218s CPU (100.1%)
C++ calls lua add_times() once:
0.436400s wall, 0.436803s user + 0.000000s system = 0.436803s CPU (100.1%)
Lua calls C++ add() many times:
0.535802s wall, 0.530403s user + 0.000000s system = 0.530403s CPU (99.0%)
Lua calls C++ add_times() once:
0.000005s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
結論是:
* C++ 調用 Lua 可達 3百萬次/s
* Lua 內部調用函數可達 2千萬次強/s
* Lua 調用 C++ 函數可達 2千萬次弱/s