私はノードプログラマーではありませんが、シングルスレッドのノンブロッキングIOモデルがどのように機能するかに興味があります。記事understanding-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つしかないため、リクエストA(最初に来る)とBが2つある場合、サーバー側プログラムがリクエストAを最初に処理します。SQLクエリを実行すると、I/O待機を表すsleepステートメントが実行されます。そして、プログラムはI/O
待機中にスタックし、Webページを後ろにレンダリングするコードを実行できません。プログラムは待機中にリクエストBに切り替わりますか?私の意見では、シングルスレッドモデルのため、あるリクエストを別のリクエストに切り替える方法はありません。ただし、サンプルコードのタイトルには、コードを除いてすべてが並行して実行されることが示されています。
(PSノードを使用したことがないので、コードを誤解しているかどうかはわかりません。)待機中にノードがAからBに切り替わる方法は?また、ノードのシングルスレッドノンブロッキングIOモデルを簡単に説明できますか?手伝っていただければ幸いです。:)