我有档案
test.rb
使用以下代码从不同的线程中递增共享变量:
require 'thwait'
threads_number = ARGV.first.to_i
incr_number = ARGV.last.to_i
start = Time.now
sum = 0
create_thread = proc do
Thread.new { incr_number.times { sum += 1 } }
end
threads = threads_number.times.map { create_thread.call }
ThreadsWait.all_waits(*threads)
p Time.now - start, sum
我在同一台计算机上用不同的ruby版本尝试了这段代码,得到了以下结果:
-
ruby 2.5.1p57(2018-03-29修订版63029)[x86_64-linux]
$ ruby multithreading.rb 4 100000
0.022668827
400000
-
jruby 9.2.4.1(2.5.0)2018-11-28 f487d1e OpenJDK 64位服务器VM 25.181-b13 on 1.8.0Ζ181-8u181-b13-2~deb9u1-b13+jit[linux-x86_64]
$ ruby multithreading.rb 4 100000
0.095028
241229
我知道Ruby2.5总是可以
400000
因为吉尔的缘故
jruby
的结果可能因多线程而不同。
-
为什么Ruby2.5在这种情况下更快?jruby不应该比ruby2.5快吗?
-
有什么区别
Thread#join
和
ThreadsWait.all_waits
?