红宝石1.9.3多核?(Ruby 1.9.3 multicore?)

2019-09-19 21:42发布

Yestereday我读了一些关于Ruby的线程(像这篇文章 ),和我一般的理解是,这(除了像JRuby的几个实现),还有就是所谓的全局解释器锁,正因为如此,一个不能运行就在同一时间多个CPU Ruby代码。 我做了一个小测试(我有AMD炫龙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"

并采取截图的系统监视器。

对我来说似乎是稀土和1.9.2使用一个内核在同一时间,但1.9.3似乎同时利用。

这是真的有可能(甚至更多内核?),还是我只是失去了一些东西,并且测试是错误的?

Answer 1:

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

这只是部分正确。 扩展的代码(用C编写的)往往不支持并行执行(不是线程安全)。 所以对于扩展调用Ruby解释器使用GIL。 但您的代码不调用任何扩展(只可能是Time.new需要锁,我不知道)。 在许多情况下(和你的代码示例),因此Ruby 可以利用多个CPU。



文章来源: Ruby 1.9.3 multicore?