目次
非同期 I/O を使用する理由
。ユーザー エクスペリエンス
三、node的异步I/O

ノード非同期 I/O の概要

Jul 11, 2018 pm 03:44 PM
node.js

この記事では主に Node 非同期 I/O の紹介を紹介します。これは、必要な友達に参考にしてもらいたいです

非同期 I/O を使用する理由

。ユーザー エクスペリエンス

JavaScript は UI スレッドと同じ単一スレッドで実行されます。同期を使用する場合、JavaScript の実行時に UI レンダリングの待機を停止する必要があり、その結果、ユーザー エクスペリエンスが非常に低下します。

Web ページがいくつかのリソースをリクエストして同期的に取得する必要がある場合、実行を続ける前に、js がサーバーからリソースを完全に取得するまで待つ必要があります。この間、UI は待機し、これにより UI との対話が行われます。ユーザーのパフォーマンスが非常に悪く、パフォーマンスに影響を与えます。

// 现在请求两个资源
//耗时为M毫秒
getData('from_db');
//耗时为N毫秒
getData('from_remote_api');
ログイン後にコピー

同期の場合は時間がかかります (M + N);

非同期の場合は時間がかかります Max(M, N);

(M + N)
如果是异步,需要耗时Max(M, N);

随着应用的复杂性,情景会变成M+N+...和Max(M,N,...),此时同步和异步的优劣就会更加凸显。另一方面,随着网站和应用的扩展,数据往往会分布到多台服务器上,而分布意味着M和N的值会线性增长,这也会放大异步和同步在性能上的差异。总之,IO是昂贵的,分布式IO是更昂贵的!

资源分配

单线程同步IO

会因阻塞IO使得硬件资源无法得到更优的利用。
ログイン後にコピー

多线程编程

优点: 可以利用多核CPU有效提升CPU的利用率
缺点: 编程中的死锁、状态同步使得程序员很是头疼。
ログイン後にコピー

node的异步IO

node采用的异步IO,利用单线程,远离了多线程死锁、状态同步,利用异步让单线程远离了阻塞,使得CPU得到更好的利用。

为了弥补单线程无法利用多核CPU的问题,Node提供了子进程 `childProcess` ,将一些运算多的任务放入子进程进行高效的运算。
ログイン後にコピー

ノード非同期 I/O の概要

二、阻塞I/O 和 非阻塞 I/O

阻塞IO

阻塞的IO操作就是发起IO操作后,线程阻塞等待IO完成,这期间cpu得不到有效利用。
ログイン後にコピー

ノード非同期 I/O の概要

非阻塞IO

非阻塞IO操作其实就是发起IO操作后,通过事件轮巡,或者事件通知机制,不断查询IO操作是否完成,或者是主线程进入休眠等待事件通知IO结束,然后继续向下执行代码,实际上非阻塞IO期间,cpu要不用来查询要不用来休眠,也没有得到有效利用。依旧是同步IO。
ログイン後にコピー

ノード非同期 I/O の概要

三、node的异步I/O

完成整个异步IO需要单个环节 事件循环 观察者 请求对象

实际上node的异步IO是采用了线程池技术,发起异步IO时,把io操作扔到线程池里面执行,然后主线程继续执行其他操作,io执行完毕通过线程间通信通知主线程,主线程执行回调。

IO线程是由Libuv(Linux下由libeio具体实现;window下则由IOCP具体实现)管理的线程池控制的,本质上是多线程。即采用了线程池阻塞IO模拟了异步IOアプリケーションの複雑さにより、シナリオは M+N+... と Max (M, N,...) になります。このとき、同期と非同期のメリットとデメリットが異なります。より目立つようになります。一方で、Web サイトやアプリケーションが拡大するにつれて、データが複数のサーバーに分散されることが多くなります。分散とは、M と N の値が直線的に増加することを意味し、非同期と同期のパフォーマンスの差も増幅します。つまり、IO は高価ですが、分散 IO はさらに高価です。

リソース割り当てノード非同期 I/O の概要

シングルスレッド同期IOrrreee

マルチスレッドプログラミング

rrreee

ノードの非同期IO

rrreeeノード非同期 I/O の概要
2. ブロッキング I/O とノンブロッキング I/O

3442411541 -5b456a1f2c544_articlex[ 1].png🎜🎜🎜ノンブロッキングIO🎜🎜rrreee🎜ノード非同期 I/O の概要🎜🎜3. ノード🎜🎜の非同期 I/O を完了するには、単一のリンク イベント ループ <code>観察 リクエスト オブジェクト。 🎜🎜実際、ノードの非同期 IO はスレッド プール テクノロジーを使用します。非同期 IO が開始されると、IO 操作は実行のためにスレッド プールにスローされ、IO の実行が完了した後、メインスレッドが他の操作を実行し続けます。スレッド間通信を通じてメインスレッドに通知され、スレッドがコールバックを実行します。 🎜🎜IO スレッドは、具体的には Libuv によって実装されます (Linuxlibeio によって実装されます。window の下には によって実装されます) IOCP (特定の実装) によって管理されるスレッド プールによって制御され、本質的にマルチスレッドです。つまり、<code>スレッド プールブロッキング IO は、非同期 IO をシミュレートするために使用されます。 🎜🎜🎜🎜🎜🎜非同期IOの原理🎜🎜🎜IOが発生すると、それをスレッドプール内のIOスレッドに入れ、そのIOスレッド上でタスクを実行させます。IOスレッドはブロッキングIOモードで実行されます。その後、メイン スレッドで実行を継続します。別の IO タスクが見つかった場合は、そのタスクをスレッド プールに入れて、別の IO スレッド (ブロック IO モード) で実行すると、メイン スレッドは実行を継続します。 🎜🎜上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 🎜🎜関連する推奨事項: 🎜🎜🎜Nodeモジュールの仕組みの分析について🎜🎜🎜🎜🎜Nodeの基本概念の紹介🎜🎜🎜

以上がノード非同期 I/O の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

最適な Node.js Docker イメージを選択する方法について話しましょう。 最適な Node.js Docker イメージを選択する方法について話しましょう。 Dec 13, 2022 pm 08:00 PM

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Nov 16, 2022 pm 08:34 PM

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Nov 29, 2022 pm 08:44 PM

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

ノードのバッファーについて詳しく見る ノードのバッファーについて詳しく見る Apr 25, 2023 pm 07:49 PM

当初、JS はブラウザ側でのみ動作していたため、Unicode でエンコードされた文字列の処理は簡単でしたが、バイナリ文字列や非 Unicode エンコード文字列の処理は困難でした。バイナリは、コンピュータのビデオ/オーディオ/プログラム/ネットワーク パッケージの最低レベルのデータ形式です。

See all articles