前些天无意中在网上看到一篇文章,写的是几种脚本语言以及c的速度比较,大意是测试下来lua的速度很慢,只相当于c1/60左右,看了一下测试函数,如下(命名版本1):

 

tkstart = os.clock()

 

local count = 10000000

local accumv = 34.5;

local function iterate (times,accumv)

    if 0 == times then

        return accumv

    else

        return iterate (times - 1, accumv + 2)

    end

end

print(iterate(count,accumv))

 

print(os.clock() - tkstart)

 

这是个迭代调用,理论上这种调用速度不快,所以改写了一下,命名版本2

 

tkstart = os.clock()

 

local i=0.0;

local function process (ret)

 while(i < 10000000.0) do

 i = i+1.0

 ret = ret + 2.0

 end

 return ret

 

end

 

process(34.5)

print(os.clock() - tkstart)

 

再改写了一下,版本3,如下:

 

tkstart = os.clock()

 

local i=0.0;

local function process (ret)

 local t = ret

 while(i < 10000000.0) do

 i = i+1.0

 t = t + 2.0

 end

 return ret

 

end

 

process(34.5)

print(os.clock() - tkstart)

 

for循环再改写了一个版本,版本4,如下:

 

tkstart = os.clock()

 

local count = 10000000

local accumv = 34.5;

local function calc (times,accumv)

        local result = accumv

        for i=1,times do

                result = result + 2.0

        end

        return result

end

print(calc(count,accumv))

 

print(os.clock() - tkstart)

 

简单测试耗时如下

版本1 0.945

版本2 0.484

版本3 0.475

版本4 0.138   编译成.out跟直接执行.lua耗时差不多,没明显变化。

虽然是一个功能很简单实现也很简单的lua函数,但速度差别很大,由此可见不同写法对执行效率影响很大,跟版本4差不多的c程序执行耗时大约为0.016, lua大致相当于c1/8 - 1/9速度,而不是那篇文章的作者认为的只相当于c1/60

 

从上面四个不同代码大致可以看出以下问题:

1、 迭代算法是很慢的(版本1)。

2、 While的效率比for慢很多(版本234的比较)。

3、 临时变量比参数效率高(版本23)。

Posted on 2010-10-03 13:47 袁斌 阅读(714) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理