首先声明下,纯粹是想看下ruby thread和native thread的差距,并无意贬低ruby.
测试结果吓一跳,不是太快。和native thread相比,实在太慢。
代码很简单,每次启动10个ruby thread,做100000次的累加。连续运行10次,求运行平均值。
我的工作机,PC 2.8G,单核。1G内存,windows XP。测试的时候也没有特别清理运行环境,
最后的平均结果3.0937
[code]
time = 0
10.times do |k|
now = Time.now
puts now.to_s
count = 0
threads = []
10.times do |i|
threads[i] = Thread.new do
#sleep(rand(0.1))
100000.times do |j|
count += j
end
Thread.current["mycount"] = count
end
end
threads.each {|t| t.join; print t["mycount"], ", " }
puts "count = #{count}"
later = Time.now
time += later-now
puts later-now
end
puts time/10[/code]
然后同样的代码用C++写了一份,运行时间都测试不出来,时间差值几乎是0。几乎程序刚刚启动,运行就结束了。不像Ruby代码,还像模像样的运行了段时间。
HOHO。
测试结果吓一跳,不是太快。和native thread相比,实在太慢。
代码很简单,每次启动10个ruby thread,做100000次的累加。连续运行10次,求运行平均值。
我的工作机,PC 2.8G,单核。1G内存,windows XP。测试的时候也没有特别清理运行环境,
最后的平均结果3.0937
[code]
time = 0
10.times do |k|
now = Time.now
puts now.to_s
count = 0
threads = []
10.times do |i|
threads[i] = Thread.new do
#sleep(rand(0.1))
100000.times do |j|
count += j
end
Thread.current["mycount"] = count
end
end
threads.each {|t| t.join; print t["mycount"], ", " }
puts "count = #{count}"
later = Time.now
time += later-now
puts later-now
end
puts time/10[/code]
然后同样的代码用C++写了一份,运行时间都测试不出来,时间差值几乎是0。几乎程序刚刚启动,运行就结束了。不像Ruby代码,还像模像样的运行了段时间。
HOHO。
1227

被折叠的 条评论
为什么被折叠?



