イベントマシンは、シングルスレッドでイベントループを使用して同時リクエストを処理するイベントベースモデルの非同期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スレッド)が組み込まれているので、スレッドを使用するのは魅力的でしょうか?しかし、私の視点からは、イベントベースのモデルがこの問題を解決するために導入されて以来、より高いレベルのアプリケーションコードで実際には心配してはいけないならば、その目的は全面的に敗北します。
ありがとうございました。すべての回答/説明をお読みください。
サイドノートとして。構文に注意してください。大文字を使用すると、 'Thread'クラスを' Thread'クラスのインスタンスで上書きすることになります。 'line 1'の後に' line 2'でやっているように 'new'のような予期したメソッドを呼び出すことができなくなります。 – Volte