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

この記事では主にノードのシングルスレッドの高同時実行性とノードの非同期 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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
node、nvm与npm有什么区别node、nvm与npm有什么区别Jul 04, 2022 pm 04:24 PM

node、nvm与npm的区别:1、nodejs是项目开发时所需要的代码库,nvm是nodejs版本管理工具,npm是nodejs包管理工具;2、nodejs能够使得javascript能够脱离浏览器运行,nvm能够管理nodejs和npm的版本,npm能够管理nodejs的第三方插件。

Vercel是什么?怎么部署Node服务?Vercel是什么?怎么部署Node服务?May 07, 2022 pm 09:34 PM

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

node爬取数据实例:聊聊怎么抓取小说章节node爬取数据实例:聊聊怎么抓取小说章节May 02, 2022 am 10:00 AM

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

node导出模块有哪两种方式node导出模块有哪两种方式Apr 22, 2022 pm 02:57 PM

node导出模块的两种方式:1、利用exports,该方法可以通过添加属性的方式导出,并且可以导出多个成员;2、利用“module.exports”,该方法可以直接通过为“module.exports”赋值的方式导出模块,只能导出单个成员。

安装node时会自动安装npm吗安装node时会自动安装npm吗Apr 27, 2022 pm 03:51 PM

安装node时会自动安装npm;npm是nodejs平台默认的包管理工具,新版本的nodejs已经集成了npm,所以npm会随同nodejs一起安装,安装完成后可以利用“npm -v”命令查看是否安装成功。

聊聊V8的内存管理与垃圾回收算法聊聊V8的内存管理与垃圾回收算法Apr 27, 2022 pm 08:44 PM

本篇文章带大家了解一下V8引擎的内存管理与垃圾回收算法,希望对大家有所帮助!

node中是否包含dom和bomnode中是否包含dom和bomJul 06, 2022 am 10:19 AM

node中没有包含dom和bom;bom是指浏览器对象模型,bom是指文档对象模型,而node中采用ecmascript进行编码,并且没有浏览器也没有文档,是JavaScript运行在后端的环境平台,因此node中没有包含dom和bom。

聊聊Node.js path模块中的常用工具函数聊聊Node.js path模块中的常用工具函数Jun 08, 2022 pm 05:37 PM

本篇文章带大家聊聊Node.js中的path模块,介绍一下path的常见使用场景、执行机制,以及常用工具函数,希望对大家有所帮助!

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境