コピー元のNode.jsを理解します
あなたは、同時にいくつかのことを行う必要がある場合、ノードは、基本的には非常に良いです。あなたは、コードの一部を書かれ、「私はこれが並行して実行してほしい」と述べたことがありますか?まあ、ノードにすべてがあなたのコードを除いて、並列に実行されます。
一度にいくつかのことを行う必要がある場合には、基本的には非常に良いノード。あなたは、コードの一部を書かれ、「私はそれが並列で実行を願っています」と言うことがありますか?ノード内のコードに加えて、すべてのものが平行になっています。
「はぁ?」
そう、すべてはあなたのコードを除いて、並列に実行されます。それを理解するために、あなたのコードは王である想像し、そしてノードは使用人の彼の軍隊です。
あなたのコードはビッグブラザーで想像し、ノードは彼のメッセンジャーです。
日は1つのサーバント王を覚ますと、彼は何が必要な場合は、彼を尋ねることによって開始します。王はしもべにタスクのリストを与え、少し長くスリープ状態に戻ります。サーバントは現在、彼の同僚の間でこれらのタスクを配布し、彼らが仕事を得ます。
その日カウボーイは弟を覚ますと、何をすべきか彼に尋ねました。ビッグブラザーは、タスクリストを与え、それを行うために一緒に他のカウボーイカウボーイにタスクを割り当てる、遼をスリープ状態に継続されます。
サーバントがタスクを終了すると、王の四半期の外に彼のラインアップは、報告します。王は、一度に1つのサーバントを中にすることができます、と彼は報告の事に耳を傾け。時には、王はしもべに出て途中で複数のタスクを与えるだろう。
王の使用人は、並行して、彼のすべてのタスクを実行するが、一度に一つの結果を報告し、その王が集中することができますのために人生は、良いです。*
メッセンジャーは保護のお金を収穫するたびに、彼はただ、時には完全なレポートがする取り決めでカウボーイカウボーイの前でなり、カウボーイの仕事に関する報告を聞き、各兄弟にビッグブラザーの家ビッグブラザーレポートの外に並ぶだろう他のタスク(すなわち、コールバック、バッグを購入する姉妹など)
「それは素晴らしいですが、あなたは愚かなメタファーを終了し、私にオタクを話すだろうか?」
確かに。簡単なノードプログラムは次のようになります。
説明次のコードスニペットを使用します
var fs = require('fs')
, sys = require('sys');
fs.readFile('treasure-chamber-report.txt', function(report) {
sys.puts("oh, look at all my money: "+report);
});
fs.writeFile('letter-to-princess.txt', '...', function() {
sys.puts("can't wait to hear back from her!");
});
あなたのコードは、ファイルを読み書きするノードに2つのタスクが与え、その後、スリープ状態になります。ノードがタスクを完了すると、そのためのコールバックが発射されます。しかし、唯一、同時に発射1つのコールバックが存在することができます。そのコールバックが実行を終了するまで、他のすべてのコールバックが並んで待たなければなりません。それに加えて、コールバックが発火する順序に保証はありません。
このコードは、ノードは二つのタスクを読み書きすることができ、そのノードがスリープしていきます。タスクが完了するまで、彼はコールバックをトリガしますが、唯一のコールバック関数が実行されると同時に、(コールバック関数の残りは一つの実行順序によって、キュー1内に配置されます)。タスクが並列に実行されているので、我々は順序が(なぜいわゆるコールバック地獄です)コールバック関数をトリガー保証することはできません。
これは〜シングルスレッドのJavaScript /イベントループのデザインの美しさであります