私はノードプログラマではありませんが、シングルスレッドの非ブロッキングIOモデルがどのように機能するかに興味があります。記事理解-the-node-js-event-loopを読んだ後、私はそれについて本当に混乱しています。それはモデルの例を与えました:
c.query(
'SELECT SLEEP(20);',
function (err, results, fields) {
if (err) {
throw err;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
c.end();
}
);
Que:スレッドが1つしかないため、2つの要求A(最初に来る)とBがある場合、サーバー側プログラムは最初に要求Aを処理します。SQLクエリの実行は、I / O待機を待機しているスリープステートメントです。そして、プログラムはI/O待機中にスタックし、背後にあるWebページをレンダリングするコードを実行できません。プログラムは待機中に要求Bに切り替わりますか?私の意見では、シングルスレッドモデルのため、あるリクエストを別のリクエストに切り替える方法はありません。しかし、サンプルコードのタイトルは、コードを除いてすべてが並列に実行されることを示しています。
(PSノードを使用したことがないので、コードを誤解しているかどうかわかりません。)待機中にノードをAからBに切り替える方法は?また、ノードのシングルスレッド非ブロッキングIOモデルを簡単に説明できますか?あなたが私を助けていただければ幸いです。:)
