2017-07-20 5 views
1

で非同期同期プロセスを使用しました。私は<strong>NodeJS</strong>のボンネットの下に掘る最近きたし、その<strong>キュー</strong>と<strong>イベントループ</strong>に関するいくつかの明確化が必要NodeJS

NodeJSはシングルスレッドなので、例えば、関数:findTheMeaningOfLife()が同期関数であり、そのまま呼び出すと、42になるまでに時間がかかります。

しかし、この機能をPromiseにラップするとどうなりますか?たとえば:

function findTheMeaningOfLifeAsync(){ 
    return new Promise(function(resolve, reject){ 
     try { 
      var meaningOfLife = findTheMeaningOfLife(); 
      resolve(meaningOfLife); 
     } catch (error) { 
      reject(error); 
     } 

    }) 
} 

そして、それを起動しますが、それはNodeJS(libuv)キューに配置され、別のスレッドで呼び出されましたか?もしそうでなければ、どうすればそれを真に非同期にすることができますか?

ありがとうございます。すべての

答えて

0

まず、私は何かを明確にしましょう:ノードjsがシングルスレッドではありません、それはつの実行スレッドいくつかのサービススレッドを(後者はI/O操作に使用されている)があります。

  1. あなたは.then()ハンドラで外部からfindTheMeaningOfLifeAsync()を呼び出す:

    は、あなたが提案するコードの典型的な振る舞いは、以下のことだろうと述べました。

  2. 呼び出された関数はすぐに約束を返し、呼び出し元関数はその約束が解決されて実行を継続するのを待ちます。
  3. 呼び出し元関数が待機している間に、実行スレッドで他のイベントが処理され続けるため、イベントループ全体が停止しません。
  4. 呼び出された関数の実行が終了すると、呼び出し元関数に約束の解像度が返されます。
  5. 呼び出し元関数は、約束の解決の結果で実行を再開します。

したがって、あなたの主な質問に関しては、約束を利用することによって何とか現在の状態を監視し、保存されたポイントから再開する前に解決を待つでしょう。しかし、これにはマルチスレッドの使用は含まれません(この場合、I/O操作は私が想定していないため)イベントが非同期プログラミングを提供するために使用されます。ノードJSのイベントをより深く理解することをお勧めします。ここで便利なリンクを提供します: NodeJs Events

関連する問題

 関連する問題