2016-06-17 9 views
2

私は、どのように同期イベントデマルチプレクスがビジー状態の解決の解決策になるかを理解しようとしています。同期イベントのデマルチプレクスは、ビジー状態の待機を解決する方法ですか?

3つのIO操作があり、3つの操作のいずれかが読み取り可能なデータを持っているかどうかを確認するために常にループしているコードがあるとします。

arry = [event1 , event2 , event3] 

    while(arry is not empty) 
    { 

     for(i = 0 ; i <= 2 ; i++) 
     { 
      if(arry[i] has something to read) 
      { 
       read data; 
      } 
      else 
      { 
       continue to next i; 
      } 

      if(arry[i] read has finished){ 
       remove i from arry 
      } 
     } 
    } 

上記の擬似コードはビジー状態です。

同期イベントデマルチプレクスまたはリアクタパターンでは、イベントリスナーが発生したときにイベントに応答することができます。しかし、イベントリスナーはどうすれば忙しい待たずにそれをすることができますか?

+0

を使用したい場合、私は、私は、「多重分離*同期イベント*」聞いたことがない認めざるを得ません。あなたはそれを説明するいくつかのリソースを指すことができますか、またはあなたの質問にいくつかの例(疑似)コードを置くことができますか? – Bergi

+0

JavaScriptイベントと同期したことはありません。しかし、それは原子炉パターンが非同期でも機能しないことを意味するものではありません。イベントが到着するまで待つのではなく、待っているイベントごとにループコードをスケジュールするだけです。 – Bergi

答えて

0

これはJSでの動作とは異なります。

非同期通知をトリガーする可能性のあるリクエストを作成する場合は、要求結果をパラメータとしてコールされるコールバックを提供する必要があります。

あなたの擬似コードではなく次のようになります。したがって、基本的

// request completion callback 
function handle_request_notification (request status and associated data) 
{ 
    store request data wherever you like 
    if all requests are complete (without error), do what you want to do 
    (now that you have a complete set of data) 
} 

// issuing requests 
do_request (whatever1, handle_request_notification) 
do_request (whatever2, handle_request_notification) 
do_request (whatever3, handle_request_notification) 

ことです実際に読むために何か(または失敗した要求がある場合に必要なコードのビットをアクティブにする非同期リクエストを処理するライブラリ)。

各特定のライブラリには、独自の方法があります。

Ajaxを最初に見ることができます。これは、おそらくすべてのJS非同期ライブラリの母です。

それとも、基礎を勉強するためにシンプルな何か、ちょうどタイマー:)

関連する問題