1

私はノードが初めてで、ノードの非ブロッキングの性質を理解しようとしています。
下の画像では、リクエストの概要図を作成しました。

ここに画像の説明を入力

私が理解しているように、単一のアプリに対する単一のユーザーからのすべてのプロセスは、単一のスレッドで実行されます。
私が理解したいのは、イベント ループのロジックがこの図にどのように適合するかということです。イベント ループは、命令がキューに入れられるプロセッサ パイプラインと同じですか?
プログラムが読み取るストリームを作成する RAM にアプリ ページをロードするとします。

readstream.on('data', function(data) {}); 

読み取りストリームを作成し、データが発生するのを待つための命令: この命令は、プロセッサのレジスタで「ハング」しますか (I/O が終了するのを待機します) が、マルチスレッド環境では、プロセッサは新しい命令を取得しません。前の I/O 要求の結果が RAM に返されるまで、RAM は?
それとも、これを完全に/部分的に間違って見る方法ですか?

補足的な (関連する、おそらくばかげた) 質問: サーバー上のさまざまなスレッドでさまざまなユーザーを実行しますが、シングル スレッドのメリットは 1 人のユーザーだけのものではありませんか?

私はこの種の詳細に慣れていないので、この質問が完全に意味をなさない場合は申し訳ありません. しかし、これを理解することは、先に進む前に私にとって不可欠なようです。

4

2 に答える 2

1

イベント ドリブンのノンブロッキング I/O は、最近のオペレーティング システムには、O/S レベルでポーリングを実行する (CPU サイクルを無駄にしない) 'select' メソッドがあるという事実に依存しています。select メソッドを使用すると、特定の I/O イベントのコールバックを登録できます。これは、スレッド対応言語で一般的に使用される「接続ごとのスレッド」モデルよりもはるかに効率的です。詳細については、Unix/Linux OS で「man select」を実行してください。

于 2015-02-25T17:40:04.770 に答える
0

スレッドと I/O は、CPU アーキテクチャではなく、オペレーティング システムの実装とサービスに関係しています。

大容量記憶装置、ネットワーク、シリアル ポートなど、あらゆる種類の入力/出力デバイスを含む操作は、CPU から外部デバイスへの要求として構成され、いくつかの可能なメカニズムの 1 つによって後で満たされます。

その現実に加えて、オペレーティング システムは代替プログラミング モデルを提供します。あるモデルでは、実行中のプログラムに同期しているように見える API が与えられるように、入出力操作の実際の性質が本質的に偽装されています。C プログラムでは、write()システム コールを呼び出すと、操作が完了するまでプロセス全体が遅延します。

別のプログラミング モデルは、システムの非同期の現実をより詳細に公開します。それがノードが使用するものです。オペレーティング システムは、長期間の非同期操作を開始する方法と、プロセスが結果をチェックする方法、またはプロセスをブロックして結果を待つ方法を提供します。ノードでは、モデル全体がイベントに応答して実行されるコードに基づいているため、ランタイム システムは多くの個別の操作を処理できます。イベントは合成的なもの (Node モジュールが最初にロードされて実行される「イベント」など) である場合もあれば、実際の非同期外部イベントの結果である場合もあります。入出力操作の場合、Node ランタイムはオペレーティング システムの通知を待機し、それを JavaScript コードを実行させるイベントに変換します。

于 2015-02-25T16:59:03.090 に答える