async
コードの並列化に関連してパッケージの動作を理解しようとしています。私が理解していることから、コールバック地獄/スープを避けるためにコードを構造化することは役に立ちますが、それが唯一の利点ですか?
async.parallel([
function(next) {
apiCallTo3rdParty(next);
},
function(next) {
apiCallTo3rdParty(next);
},
function(next) {
apiCallTo3rdParty(next);
}
], function(err, res) {
// do something else with returned data
});
上記のコードでは、3 つの API 呼び出しはすべて、他の呼び出しが完了するのを待たずに行われます。仕様通り。最後のコールバックは、最長の API 呼び出しが戻った後に呼び出されます。
しかし、コードを変更していくつかのブロック操作を行うとどうなるでしょうか?:
async.parallel([
function(next) {
sleep(5);
},
function(next) {
sleep(5);
},
function(next) {
sleep(5);
}
], function(err, res) {
// do something else with returned data
});
「 Node.jsはシングル スレッドです」を額面通りに受け取ると、async
ブロックが 15 秒後に最後のコールバックを実行することを意味すると解釈できますが、「Node.js は独自の内部スレッド プールを維持している」ことを知っていると仮定できますか? Node はそれぞれのコールバックを独自のスレッドで実行し、関数を真に並列化し、5 秒後に最後のコールバックを呼び出すでしょうか?