ホームページ > ウェブフロントエンド > jsチュートリアル > ノードシングルスレッドにより高い同時実行性原理を実現

ノードシングルスレッドにより高い同時実行性原理を実現

小云云
リリース: 2018-02-07 13:36:40
オリジナル
2550 人が閲覧しました

この記事では主にノードのシングルスレッドの高同時実行性とノードの非同期 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
ログイン後にコピー

b. 非同期 I/O とは何ですか?

その名前が示すように、非同期 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);
}
ログイン後にコピー

b. なぜ、nodejs は CPU を使用する操作が苦手なのか

、なぜなら、nodejs はシングルスレッドだからです


関連する推奨事項:

シングルスレッドの JS 実行の問題の詳細な説明


JS シングルスレッドの非同期 IO コールバックの特性の詳細な説明

JavaScript シングルスレッドに関するいくつかの詳細な紹介 (写真)

以上がノードシングルスレッドにより高い同時実行性原理を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート