Ruby 1.9.3 multicore?



Yestereday我读了一些关于ruby中线程的文章(就像本文一样),我通常理解的是,(除了像JRuby这样的少数实现),存在所谓的全局解释器锁,因此,不能一次在多个CPU上运行ruby代码。我做了一个小测试(我有AMD Turion II双核移动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似乎同时使用这两个核心。

这真的有可能吗(即使有更多的内核?),还是我只是错过了什么,测试出错了

有一个所谓的全局解释器锁,正因为如此,一个人不能同时在多个CPU上运行ruby代码

这只是部分事实。扩展代码(用C编写)通常不支持并行执行(不支持线程安全)。因此,对于扩展调用,ruby解释器使用GIL。但您的代码不调用任何扩展(可能只有Time.new需要锁定,我不确定)。因此,ruby在许多情况下(以及您的代码示例)可以使用多个CPU

相关内容

  • 没有找到相关文章

最新更新