I/O操作を行うとき、nodejsは別のスレッドで作業を行うことを知っているので、そのスレッドを他のコアで実行することはできませんか? もしそうなら、1 つの nodejs プロセスだけが 2 つのコアを利用できるのではないでしょうか?
1 に答える
ノードは非同期 I/O を実行しますが、I/O は CPU に関してはほとんど「作業」しません。ほとんどの場合、OS がデータを処理する準備が整うのを待っています。したがって、単一のノード プロセスは、ノード プログラム自体の実際のロジックに対して 1 つの CPU コアしか有効に利用できません。その CPU コアを使い果たし、実際のプログラムのロジックをより多く同時に実行したい場合は、別のプロセスが必要です。はい、技術的にはどのノード プログラムでも少数のスレッドが使用されていますが、そのうちの 1 つだけが実際に JavaScript を解釈している CPU 集中型のスレッドです。
ほとんどの場合、OS がデータを処理する準備が整うのを待っています。したがって、単一のノード プロセスは、ノード プログラム自体の実際のロジックに対して 1 つの CPU コアしか有効に利用できません。なぜ?
これは仕様によるものです。この特定の選択を行うことにより、ノード プログラムは、スレッド、セマフォ、ロック、デッドロックなどの複雑でエラーが発生しやすい並行プログラミングのイディオムを処理する必要がなくなります。1. 非同期 I/O は現在、高並行性システムの最も効率的で管理しやすい設計と見なされているように思われること、および 2. 並行性のための他のプログラミング イディオムのほとんどは、正しくコーディングするのが比較的難しいという 2 つの主な観察に基づいています。これはまさに node.js が選択したものです。たとえば、「go」言語は、マルチスレッド、ブロッキング、チャネル、メッセージ キューイングなどを可能にする他のイディオムを優先するさまざまな選択を行いました。その結果、go
プログラムはマルチコア マシンをより有効に活用できます。