2012-02-09 9 views
0

Node.jsのイベントループのアーキテクチャを理解しようとしています。私は、setTimeout()を持つサーバーとwhile句でsleep()を使用したサーバーを並べて比較しました。 setTimeout()は非同期に処理されましたが、sleep()は処理されませんでした。 http://www.atmarkit.co.jp/fcoding/articles/websocket/01/websocket01a.htmlNode.js - JavaScriptのどの機能がプロセスを正確にブロックしていますか?

これは多少分かりました。しかし、私は、「どのようにプロセスをブロックし、ソースを読んでも見つからないのか」という質問を思いつきました。どうやってそれを決めますか?関数のシグネチャで

+0

のNode.jsプログラムの、またはのNode.js自体のソース?いずれにしても、質問のある関数については、関数がブロックするかどうかを指定するドキュメントを見つけることができます(関数がブロックしない限り、node.jsのドキュメントが指定されない可能性があります)。特定の機能を覚えていますか? – Corbin

+0

すべての機能が、ブロックされていないことを文書化したり、教えたりしない限り、ブロックするものとします。例えば、 'console.log'は非ブロックで、' util.debug'ブロックであることは明らかではありません。 – Raynos

答えて

1
  1. 見て:それはそれのブロックよりもvar result = calculateData(parameters)であれば(ところですべての処理ループIOノードブロックの機能が、ほとんどの機能は、単にIO要求して終了キュー)
  2. 対策機能の実行時間を、 "非ブロッキング '関数の実行時間は、結果コールバックが呼び出されるまでの時間に比べて小さくなければなりません。
var start = new Date(); 
doesItBlock(function(err, result) { 
    console.log('doesItBlock callback called after ' + (new Date - start)); 
}); 
console.log('doesItBlock exited after ' + (new Date - start)); 
関連する問題