2012-02-11 15 views
0

について;/bは/ aが完了するまで処理されません。それが1つのスレッドならば、そうでなければなりません。では、この問題を解消する方法は何ですか?NodeJS Parallesim次の例を考えてみ

例2:これは、関数に入るdb.find呼び出し、そうdb.findが完了したとき、コールバックres.send(データ)を実行するよう

app.get("/a", function(res){ 
    // Some-Library-Database function 
    db.find({"user.id" : 5}, function(data){ 
     res.send(data); 
    }); 
}); 


app.get("/b", function(res){ 
    res.send("done"); 
}); 

ここでも、/ Aが要求されています私たちは/ bを待つことなく応答することができます。 (私が間違っていると私を訂正してください)

したがって、例1の例2もどうやって達成できますか?私たちはそのブロック機能を非同期で実行することもできますか?または、DBがIO(TCP経由でサーバにコマンドを送信するなど)が機能を非同期にしていますか?つまり、nodejsのIOで非同期の唯一のものは何ですか?大きな計算が必要な場合は、IO要求を行う必要がありますか?

私は概念に従って学習し、構築しようとしています。私はノードについての批判を読むためにNodeJS is cancerの投稿を読んだことがあります。彼がただトローリングしているかどうかはわかりません。

答えて

1
  1. プットあなたのメインのコードの先頭にblock.jsへ
  2. コールchild_process.fork「10秒のためのいくつかのブロッキング機能」(「app.js」)ブロック内
  3. 追加「メッセージ」イベントハンドラ.js、まだ可能クライアントをb.on('message', function(reply) {...}});

であなたのブロッキングハンドラ内ですべて処理された順番を持っている。この方法は返事を読んで、そこにあなたのブロッキングコードb.send(引数)として

  • コール子を入れ、どちらかのIOをブロックするため、(そしておそらくあなたに「10秒間ブロッキング」あなたが何かを持っている場合は、更新ドキュメント、ところで

  • +0

    をリンクして:「app.js」

    編集が親で処理するコードを「ブロック」を使用していませんノンブロッキングノードの代替)またはCPUバインドされたタスク(おそらくそれはC/C++のようなものに書き直す価値があります) –

    +0

    リンクが壊れているようです – Annan

    関連する問題