1. ホーム
  2. multithreading

[解決済み] マルチスレッドに代わるNode JSを把握する

2022-05-03 08:56:32

質問

私が正しく理解していれば、Node JSはノンブロッキングです。つまり、データベースや他のプロセスからの応答を待つ代わりに、他のことに移動して後でチェックバックします。

また、シングルスレッドであることも特徴です。

つまり、あるNode JSプロセスは、1つのCPUコアを完全かつ効率的に利用することができますが、マシン上の他のコアを利用することはない、ということです。

もちろん、他のCPUは、SQLデータベースなど、意図的に分離されたCPUの重いサブルーチンを別のプロセスで使用できることを意味します。

また、Node JSのプロセスが無限ループや長時間実行する機能を持っている場合、そのプロセスは無限ループや長時間実行する機能を停止する(またはプロセス全体を殺す)までは、もはやいかなる意味でも役に立ちません。

これはすべて正しいのでしょうか?私の理解は正しいですか?

どのように解決するのですか?

ほぼ正解です、はい。node.jsサーバーは内部スレッドプールを持っているので、ブロック処理を行い、処理が完了したらコールバックやイベントでメインスレッドに通知することができるのです。

たとえば、ノンブロッキングでファイルシステムを読み込む場合、スレッドプールのスレッドに読み込みを実行させ、完了したらコールバックを設定することで実装するようです。つまり、メインのnode.jsプログラムが何かを行っている間に、別のスレッド/コアで読み込みが行われる可能性があります。

しかし、node.jsの観点からは、完全にシングルスレッドで、複数のコアを直接使用することはありません。