この記事では主にノードのシングルスレッドの高同時実行性とノードの非同期 I/O の原理を紹介します。興味がある方はぜひ学んでください。
1. 高い同時実行性を実現するノードのシングルスレッド実装の原則
ご存知のとおり、nodejs は高い同時実行性をサポートするシングルスレッドのスクリプト言語です。しかし、なぜシングルスレッドのnodejsが高い同時実行性をサポートできるのでしょうか?多くの人はその原理を理解していません。以下に私の理解を話させてください:
1. ノードの利点: ノードの I/O リクエストはすべて非同期であるため、I/O 集約的な処理がノードの強みです。例: SQL クエリ リクエスト、ファイル ストリーム操作リクエスト、http リクエスト...)
a. 非同期とは何ですか?
非同期: 操作コマンドを発行すると、すべての操作が完了すると、コールバックが実行されます。
// 第一步:定义变量 let a = 1; // 第二步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行) setTimeout(() => { console.log(a); }, 0) // 第三步:赋值,回调函数没有执行 a = 2; // 第四步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行) setTimeout(() => { console.log(a); }, 0) // 第五步:赋值,回调函数没有执行 a = 3; // 当所有代码执行完毕,cpu空闲下来了,就会开始执行异步队列里面的回调函数 // 所以最后控制台输出:3 3
その名前が示すように、非同期 I/O は I/O リクエストを非同期に発行することです
c.nodejs は I/O リクエストを非同期に発行できますが、なぜ高い同時実行性をサポートできないのですか?
nodejsのI/O操作により、最下層でマルチスレッドが有効になります
同時に複数のIOリクエストがある場合、メインスレッドは複数のeioスレッドを作成してIOリクエストの処理速度を向上させます
追加の知識ポイント:
d.nodejs の I/O 操作はマルチスレッドを有効にしますが、すべてのスレッドはメインスレッドに基づいて開始され、1 つのプロセスでのみ実行できるため、CPU リソースを完全に活用することはできません。
pm2プロセスマネージャーはこの問題を解決できますpm2はロードバランシング機能を備えたNodeアプリケーション用のプロセスマネージャーですe CPUコア数とスレッドの関係 過去のシングルCPU時代では、シングルタスクでした。ある時点では単一のプログラムしか実行できません。その後、コンピューターが同時に複数のタスクやプロセスを並行して実行できるマルチタスク段階に発展しました。本当の意味での「同じ時点」ではありませんが、複数のタスクまたはプロセスが CPU を共有し、複数のタスク間での CPU の実行切り替えを完了するのはオペレーティング システムに任されているため、各タスクは特定の特典を得る機会がタイムスライスで実行されます。マルチコア CPU を使用すると、複数のタスクを同時に実行できます。このタスクが実行される特定の CPU コアは、オペレーティング システムと CPU 自体の設計に関係します。 2. ノードの欠点: 欠点。 CPU を使用する操作
a. CPU を使用する操作 (複雑な操作、画像操作) とは
// 这就是一个cpu密集型的操作 for (let i = 0; i < 1000000; i++) { console.log(i); }
関連する推奨事項:
シングルスレッドの JS 実行の問題の詳細な説明
以上がノードシングルスレッドにより高い同時実行性原理を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。