2017-12-07 8 views
0

RubyとJRubyの新機能で、Rubyでマルチスレッド化されたコードを実装しようとしていましたが、GILがコードを並列実行できないことを知りました。同じコードを実装し、JRubyでの実行時間はRubyよりはるかに優れていました。 JRubyのスレッディングはJavaのスレッディングと非常に似ていることを学んだので、Javaのコードでも同様のコードを実装しました.Javaでのパフォーマンス(実行時間)はJRubyよりも約10倍速くなっています。このため?ありがとうございます。RubyとJRubyとJavaのマルチスレッド化

+0

Rubyは、Javaなどの静的言語よりも通常実行が遅い動的言語です。パフォーマンスを向上させる動的言語用のさまざまなオプティマイザが存在します(つまり、多くの作業がブラウザのJavaScriptを高速化しています)。しかし、言語の根本的な原則のために、動的言語には本質的なパフォーマンスの欠点があります。パフォーマンスと静的なコンパイル時の安全性/開発の速度と臨時のハックビリティは、静的言語と動的言語の間の主な論点です。 – slipperyseal

+0

あなたの提案に感謝@slipperyseal、マルチスレッドを実装している間、静的型と動的型付き言語のパフォーマンスの違いは何か特別な理由はありますか?私はスレッドの実行とそのような何かの違いを意味する? –

+0

はそれ自身ではありません。あなたがロックやスピンロック(現代のJVMはやっていない - 現代のJVMの同期は非常に高速です)に多くの競合がない限り、そうではありません。あなたの問題は単純に次のようになります:JRubyで実行されるRubyコードは、同等の通常のJavaコードよりも単純に遅くなります。 – slipperyseal

答えて

0

JRubyがJavaでRubyを実装していると考えると、説明は非常に簡単です。つまり、.rbを使って実行するJavaコードが.classにコンパイルされた.classに比べて...

たとえメソッドのディスパッチがコストがかからなかったとしても、Rubyの動的な性質があります。あなたがJava上でa+1を追加するとintに追加されますが、Rubyにはa+1が追加されています。

あなたの質問はかなり一般的であり、最終的にどのようなパフォーマンス測定をしたのかもわかりませんJRubyを使って「現実の」仕事をするときの生産性を10倍にする価値があると思えば、「ネイティブ」Javaでその部分をやり直すことができます。

関連する問題