1

私は Node.js テクノロジーに根本的な混乱があります。この小さな例で説明しましょう。

私はこのコードを持っています

setTimeout(function (){
    console.log('world');
}, 2000);

console.log('hello');

このコードの実行を開始すると、すぐに「hello」が出力され、2 秒後に「world」が出力されます。

node.jsがシングルスレッドフレームワークであると言われている場合、残りのコード(印刷の世界)を実行しているのは単一のスレッドだけであるため、このsetTimeout関数が実行されるコンテキストまたは場所(スレッド/プロセス)を知りたいだけです。 .

DB ヒットなどの I/O 呼び出しの場合、node.js は Libeio を使用し、Libeio は内部でスレッドを使用します。したがって、シングルスレッドではありません。

私は正しいですか??

提案してください。

ありがとう

4

2 に答える 2

2

実際、Node.js は内部でスレッドを使用します。「シングル スレッド」とは、JavaScript がこれらの内部スレッドの 1 つだけで実行されることを意味します。

このスレッドは、次のように要約できるイベント ループを実行します。

while true
    foreach events as event
         call event js callback
    endforeach
endwhile

関数はイベント ループでタイマーを作成し、setTimeout後でコールバックを呼び出すようにトリガーします。

于 2013-02-05T16:39:46.980 に答える
1

タイマーは、「javascript シングル スレッド」の同じスレッドで実行されます: JavaScript タイマーについて

ファイル システム コールは、C/C++ レベルで発生します。内部的に nodejs はスレッドのプールを使用します。libuvライブラリはその機能を提供するため、C/C++ レベルで非同期呼び出しを行います。次に、node.js はパブリック API を「javascript シングル スレッド」に公開します。

于 2013-02-05T18:02:12.000 に答える