昨天看了一点关于 ruby 中的线程(比如这篇文章),我大致的理解是,(除了 JRuby 之类的少数实现),有所谓的全局解释器锁,因此无法运行一次在多个 CPU 上运行 ruby 代码。我做了一个小测试(我有 AMD Turion II Dual-Core Mobile M500 处理器,运行 ubuntu 11.04,+rvm),看看这个在行动中,代码如下:
threads = []
CPU = 2
CPU.times do
threads << Thread.new {
x=0
time=Time.new
while 1 do
if Time.new - time >= 30 then
break
else
x=1.00/24000000000.001
end
end
}
end
threads.each { |t| t.join }
puts "done"
并截取了系统监视器的截图。
对我来说,REE 和 1.9.2 似乎一次使用一个内核,但 1.9.3 似乎同时使用了两者。
这真的有可能(即使有更多的核心?),还是我只是遗漏了一些东西,而测试是错误的?