2012-03-09 12 views
1

RubyのメソッドをJava環境から呼び出す必要があります。私はこれらの4つのソリューションを試しました:JavaからMRI Rubyを呼び出す/使用するには?

  1. JRubyを使用してください。これは、Java仮想マシン内のすべてを実行するため、優れています。しかし、私はいくつかの重要な(容認できない)パフォーマンスの問題を経験しました:
    • JRubyは現在私のCの拡張機能で動作しません。
    • Rubyのフォークコールは、Java仮想マシンで実行しても安定した動作をしません。
    • コードはJRubyでMRI Rubyより遅く実行されます。
  2. 使用ROR。 Ruby on Railsを使用してWebサービスを提供することにより、Javaをすべてバイパスします。これは機能しますが、IT部門(JavaおよびWebサービス開発者)またはR & D部門(RubyおよびC開発者)がドメイン外で働くように強制します。
  3. Javaシステムコールを使用してください。 Javaシステムコールを使用して独立型Rubyプログラムを呼び出し、XMLファイルを介して入出力データを解析することができます。これは機能しますが、新しいプロセスの開始とXMLファイルの処理のオーバーヘッドはパフォーマンス上の問題です。
  4. 使用RJB。 Ruby Java BridgeではRubyからJavaを呼び出すことができますが、これは私が必要とするものの逆です。

上記の問題がなく、JavaからMRI Rubyを呼び出す方法はありますか?

+1

ちょうど好奇心から:あなたはJRubyがMRIより遅いのは何ですか? JRubyはMRIよりも(はるかに)待ち時間が長くなりますが、そのスループットはかなり高いはずです。それ以外の場合、JRuby *はそのバグを考慮します。 –

+0

私の同僚は、JRubyソリューションを1年ほど前に見てきました(201103)。私が説明した3つの問題を経験しています。現時点では残念ながらJRubyがなぜ私たちのソフトウェアで遅く動作するように見えるのかについての詳細はありません。主な問題は、gnu科学ライブラリを含むCの拡張機能を動作させることができなかったことです。 Cで重要な部分をコード化する能力はパフォーマンスを得るための主な方法です。そのことができないのは私たちにとって大きな問題でしたが、JRubyはそれ以来改善しています。 –

+0

ああ、はい、あなたがCに依存しているなら、それは問題になります。 JNI *は主に、メモリと型の安全性を確保すると同時に、ポインタ演算のようなC言語の慣用表現を可能にする複雑さのために、非常に遅いです。 Javaの数値ライブラリを確認しましたか? HotSpot JVMは、特にJava 7の中では、本当に信じられないほど驚異的に素晴らしいものです。特にCで競合したり、勝利したりすることはできません。 –

答えて

1

あなたは、代わりにXMLよりも効率的なものを使用してファイルを経由してますが、パイプ

  • を介して通信していない
  • 長時間実行デーモンプロセスを使用して、プロセスを起動しませ

    • で#3がより効率的に作ることができますプロトコルバッファーのようなもの

    しかし、私はあなたが逃したオプションは表示されません。ごめんなさい。

  • 関連する問題