lua和php的性能比拼
lua脚本被广泛用于游戏,也许是得益于skynet框架的大行其道。lua亲C语言,轻量,语法友好,支持多线程,优点很多。但是作为一名PHP拥趸者自然更亲PHP的,哪怕在网络舆论上PHP似乎已经不再受欢迎。用lua写一些业务逻辑的时候发现执行效率不是很理想,最后同事对我的代码做了很多优化并且加入了多线程才达到了预期的效果。这让我对lua这个号称速度最快的脚本性能产生了质疑,接下来跟PHP做了个简单的性能测试。
首先运行环境是在Ubuntu server22.04.3上,CPU为i5-9400F 6核 2.9GHZ, 8G内存,256G的三星ssd + 1TB机械盘。
lua版本是5.4.4,PHP版本是8.1.2。
先测试了50万个0到9999的随机数字生成并用逗号拼接写入到文本中的耗时。
lua代码如下:
<code>
function tt()
local tab = {}
for i=1, 500000, 1 do
table.insert(tab, math.random(0, 999))
end
local file, err = io.open("example.txt", "w")
file:write(table.concat(tab,","))
return #tab
end
local stime = os.time()*1000 + os.clock()*1000
print(stime)
print(tt())
local etime = os.time()*1000 + os.clock()*1000
print(etime)
print("总耗时:",etime-stime,"毫秒")
</code>
<img src="https://product.liyiru.top/uploads/26d4a3c508580a4ace49940aaba9e19e.png"/>
temp.lua运行10次平均下来耗时229毫秒。
php测试代码如下:
<code>
function tt(){
$a = [];
for($i=0; $i<500000; $i++){
$a[] = mt_rand(0, 9999);
}
$f = fopen("temp.txt", "w");
fwrite($f, implode(",",$a));
fclose($f);
return count($a);
}
$stime = microtime(true) * 1000;
echo $stime."\n";
echo tt()."\n";
$etime = microtime(true) * 1000;
echo $etime."\n";
echo "总耗时".($etime-$stime)."毫秒\n";
</code>
<img src="https://product.liyiru.top/uploads/f57751304b9eaf4baee9132b2ee33b98.png"/>
10次下来平均耗时45.5毫秒左右。
测试结果总的来说不开多线程lua不占优势,也可能是测试样例的问题。
接下来也用上面的代码测试了nodejs和golang,go毕竟是编译型语言,维持在30多毫秒的样子。nodejs和PHP耗时比较接近。相较于老版本,PHP8开始确实有不小性能提升。不过编程语言终究只是工具,业务逻辑和算法对速度影响更大。
更多>>