EM.defer
EM.defer
を使うことで、ブロッキングI/O処理(ファイル読み込み、ネットワーク通信など)をメインスレッドの外で実行させ、結果をコールバック関数で受け取ることができます。
以下に例を示します。
EM.run
の中で、deferにより別スレッドで実行されるoperation
、およびdefer実行が完了した時にメインスレッドで呼ばれるcallback
というふたつのラムダを定義しています。これを実行すると、
operation
ラムダの内容のみ別スレッドで実行されているのがわかります。
EM::Deferrable
一方、EM::Deferrable
はオブジェクトの状態を監視して、処理が成功したか失敗したかによってインスタンスに予め登録したコールバックを呼び出す機能を持ちます。使い方は以下の例を見てください。
まず状態を監視したいクラスにEM::Deferrable
をincludeすることで、いくつかのメソッドが利用可能になります。成功時の処理をcallback
、失敗時の処理をerrback
というメソッドに渡したブロックの中で定義しておき、あとは処理結果に応じて成功(succeed
)、失敗(fail
)のいずれかを呼び出した時点であらかじめ登録しておいた処理が実行されます。
これによって、非同期処理の結果に応じて分岐する処理を可読性高く書くことが出来ます。
以上でEventMachineの簡単な紹介は終わりです。