游戲服務器經典的架構就是C++和Lua的結合,C++開發主體框架,Lua實現一些復雜的邏輯。我們都知道Lua是一種非常快的語言,但是到底有多塊,我們測試下看看。
C++調用Lua的性能測試,發現不對的地方望提出。
實驗一:我們使用C++調用Lua帶8個以上參數的函數,而這個函數裡面什麼也沒有做。我們通過這個實驗能夠簡單地測試出:使用Lua虛擬機和向調用棧當中傳入8+個參數和Lua取出這些參數的時間。但是其中的參數類型比較多樣,有整形,浮點型,和數組。實驗的Lua函數比較簡單,如下:
function test(x1,x2,x3,x4,x5,x6,x7,x8,x9)
end
實驗結果:我們調用這個函數1000次所需要的時間在35ms左右,也就是說一次調用的時間在0.035ms左右
實驗二:我們使用C++調用帶有一個參數的Lua函數,通過和實驗一的結果組成方程組能幫我們求出使用Lua虛擬機的時間和參數出入棧的時間。
其中Lua函數是非常簡單的如下:
function test(x1)
end
實驗結果:我們調用這個函數1000次所需要的時間在16ms左右,也就是說一次調用的時間在0.016ms左右。
實驗三:我們在實驗二的函數中加入Lua調用C++的函數,這個函數在C++端也什麼都不做,來測試Lua調用C++時入棧和出棧時候的時間。
函數簡單如下:
function test(x1)
Chat(x1,x2,x3,x4,x5,x6,x7)
end
實驗結果:我們發現其使用時間高於(實驗二)15ms左右,估計,調用一次虛擬機的時間是14ms,參數的時間估計是1ms左右
實驗四:我們在實驗二的基礎之上將其函數參數擴充到2個,我們觀察其時間有沒有小幅的變化。
函數如下:
function test(x1,x2)
end
實驗結果:我們發現時間和實驗二差不多,這或許可以反映出出入棧的時間是比較快的,申請比較大的棧內存或許會占用比較多的時間。
實驗五:我們在實驗二的基礎上將函數的參數擴充到3個,我們發現其時間還是沒有明顯的變化。
函數如下:
function test(x1,x2,x3)
end
實驗結果:可以反映出出入棧的時間是比較快的,申請比較大的棧內存或許會占用比較多的時間。
實驗六:我將函數的參數擴展到7個,我們觀察其時間是如何變化的
函數如下:
function test(x1,x2,x3,x4,x5,x6,x7)
end
實驗結果:發現去時間和實驗五差不多,或許可以驗證出入棧的時間是比較快的,申請比較大的棧內存或許會占用比較多的時間。