4

イベントマシンは、シングルスレッドでイベントループを使用して同時リクエストを処理するイベントベースモデルの非同期I/Oライブラリ(node.jsなど)であると言われています。 Rubyアプリケーション層のコード(つまり、要求を処理する際にコントローラを制御する)?なぜRuby Event Machineでスレッドを使用するのですか?

私はnode.jsモデルにもっと慣れていますが、実際にコードをコールバック内にラップして、すべてがあなたの世話をしています。 (新しいスレッドを生成するkqueue、epollなどのselect()システムコールは、下位レベルのC++実装で処理されます)、ECMAscriptはその性質上スレッドを持っていません。

イベントマシンについて学ぶためにしようとしたときに最近、私はRubyコードのこの作品を見た:

Thread = Thread.current 
Thread.new{ 
    EM.run{ thread.wakeup } 
} 
# pause until reactor starts 
Thread.stop 

スレッドは、イベントベースのプログラミングルビー環境のパラダイムと何に使用する場合、私はちょうど好奇心が強いです特定の状況では、それらを使用する必要があります。

ruby​​にはスレッド(MRIグリーンスレッド、JRuby JVMスレッド)が組み込まれているので、スレッドを使用するのは魅力的でしょうか?しかし、私の視点からは、イベントベースのモデルがこの問題を解決するために導入されて以来、より高いレベルのアプリケーションコードで実際には心配してはいけないならば、その目的は全面的に敗北します。

ありがとうございました。すべての回答/説明をお読みください。

+0

サイドノートとして。構文に注意してください。大文字を使用すると、 'Thread'クラスを' Thread'クラスのインスタンスで上書きすることになります。 'line 1'の後に' line 2'でやっているように 'new'のような予期したメソッドを呼び出すことができなくなります。 – Volte

答えて

1

スレッドとステートマシンの最大の違いは、スレッドがマルチコアプロセッサを利用して真の並列処理を行い、ステートマシンがすべてをシリアルで処理することです。一方、状態マシンは、競合状態についてそれほど心配する必要がないので、データの整合性を維持する方が簡単です。 EventMachineを使用する場合は、あなたの仕事に費やす時間は、反応器から「奪わ」されているので

2

あなたは、私が仕事をしようとしている知っているとき、私はスレッドを使用し、CPUを集中的タスクを持つことはできません。

  • こと別のスレッドでタスクを産卵これらのケースでは、私の平均タスク

より多くのCPUを使用

  • (あなたがeventmachineスレッドをブロックすることはありません)をブロックすることは、それ自身をやってから原子炉を妨げることなく、その仕事をすることができます作業。

    もう1つの選択肢は、さらに別の異なる獣である繊維を使用することです。

  • 関連する問題