使用jRuby时,我的ruby线程代码是否会自动并行运行

时间:2017-07-25 12:43:44

标签: ruby multithreading jruby

我有这段代码

require 'thread'
work_q = Queue.new
(0..50).to_a.each{|x| work_q.push x }
workers = (0...4).map do
  Thread.new do
    begin
      while x = work_q.pop(true)
        50.times{print [128000+x].pack "U*"}
      end
    rescue ThreadError
    end
  end
end
workers.map(&:join)

我知道如果我使用MRI运行,它只能运行得很清楚。

但是,如果我在jRuby上运行它,它会以简洁和平行的方式运行,或者只是简单地运行

是否必须在jRuby上使用java编写线程代码才能实现并行处理?

1 个答案:

答案 0 :(得分:1)

简而言之,是的,它将是平行的。 jruby附带了用本机java编写的自定义线程库,所以当你将require 'thread'放在文件的顶部时,你实际上使用的是java库,而不是ruby库。

只要您的java安装支持并行线程(以及大多数现代线程),并且只要您的操作系统支持并行线程(大多数现代线程),那么您的jruby代码也有可能并行运行