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



我有这个代码

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 上运行它,它会并发和并行运行,还是只是同时运行

是否必须使用 java 在 jRuby 上编写线程代码来实现并行过程?

简而言之,是的,它将是并行的。 Jruby 附带了一个用原生 Java 编写的自定义线程库,因此当您将require 'thread'放在文件顶部时,您实际上是在使用 Java 库,而不是 Ruby 库。

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

最新更新