2017-07-25 9 views
0

が、私はこのコード使用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) 

を持っていたときに私のRubyのスレッドコードは、私はMRIを使用して実行する場合、それが唯一のconcurently実行しています知っている自動並列に実行されますありません。

しかし、私はJRubyの上でそれを実行した場合、それはconcurentlyと並列実行するか、単にconcurently

ますが、並列プロセスを実現するためにはJRuby上でJavaを使用してスレッドコードを記述することは必須ですか?

答えて

1

要するに、そうです、それは並行します。 jrubyにはネイティブjavaで書かれたカスタムスレッドライブラリが付属していますので、ファイルの先頭にrequire 'thread'を置くと、実際にはRubyライブラリではなくJavaライブラリが使用されます。

あなたのJavaインストールがパラレルスレッドをサポートしていれば(ほとんどのものがそうします)、あなたのオペレーティングシステムがパラレルスレッドをサポートしている限り(ほとんどのものがそうです)、あなたのjrubyコードはよく

+0

ああいいです。それを知ることは素晴らしいことです。もう1つの質問。それが並行して実行されていることを証明する方法。 –

+0

@SunuPinasthikaFajar Windowsの場合は、タスクマネージャを開き、[パフォーマンス]タブに移動し、右クリックして[グラフを変更する>論理プロセッサ]を選択します。これにより、すべてのプロセッサコアを監視して、コードがすべてのプロセッサコアで実行されているか、そのいずれかで実行されているかどうかを確認できます。 – eiko

+1

Linuxの場合は、 'htop'コマンドを使ってプロセスが動作しているコアを確認することができます。 – eiko

関連する問題