この記事は、Nodejs におけるブロッキングとノンブロッキングを理解するのに役立ちます。一定の参考値があるので、困っている友達が参考になれば幸いです。
推奨学習: 「nodejs チュートリアル 」
ブロッキングとノンブロッキングの 2 つの概念について、誰もがある程度のアイデアを持っているはずです。 :
簡単に言えば、ブロッキングは主に同期モードによって発生します。ノンブロッキングは、時間のかかる操作を処理する非同期モードとして理解できます。
では、ブロッキングとノンブロッキングとは何ですか? Node.js ではブロッキングはどのように記述されていますか?この問題については主に以下で説明します:
Node でのブロックとは何ですか?
I/O 操作は、主にシステム ディスクとの対話 (データの読み取りと書き込み) やネットワーク リクエストなどを指すと理解できます。
ブロッキングは実行です。他の JS コードの場合は、前の時間のかかる I/O 操作
または一部のネットワーク リクエストが完了するまで待つ必要があります。 Node にはこの問題を解決するためのイベント ループがあるため、js の実行中にイベント ループがオンになっていないと、実際にはブロッキングが発生します。
実は、Node.js では、通常の状況でもブロックされる状況が存在します。その理由は、Node の非同期処理が (イベント ループを使用した) I/O 操作に適しているためですが、一部のJavaScript に存在する可能性のある CPU 集中的な操作パフォーマンスは比較的低いです。学生の中には、なぜ Node.js が CPU を集中的に使用する操作を非同期でサポートできないのかと疑問に思う人もいるかもしれません。これらの CPU 負荷の高い操作は、実際には、多数の for ループ、大量のデータ計算などの同期コードであることが理解できるためです。
Node.js の標準ライブラリにはいくつかの同期メソッドもありますが、そのほとんどはブロッキング効果を実現するために libuv
に基づいています。 Node のネイティブ モジュールにはいくつかのブロック メソッドもあります。ただし、Node は、対応する非同期バージョンの API も提供します。
libuv は何をしているのですか?これは、複数のプラットフォームをサポートする非同期 I/O 操作用のライブラリです。詳細については、公式 Web サイトを参照してください: https://libuv.org/
Node のノンブロッキングとは何ですか?
まず、Node に限定されないコンテキストでノンブロッキング (非同期) を実現する方法を考えてみませんか。
単純な 2 つ:
1) 複数のスレッドを開いて同時操作を処理できる
2) イベント ループ モード (イベント キューに非同期操作がある場合)。非同期操作が終了したら、対応するコールバック関数を呼び出して非同期の戻り結果を処理します
Node.js はシングルスレッドです。その理由は、Node.js の外側の層は JavaScript によって実装されており、解釈とJavaScript の実行は V8 エンジン
を介して行われます。
JS の実行はシングルスレッドであるため、JS の解釈と実行中に解釈と実行のために別のスレッドを開くことは不可能です。そのため、Node.js は 2 番目の方法を使用してノンブロッキングを実現します (非同期操作) )の。
Node でブロッキング API と非ブロッキング API を混在させないように注意してください
英語の元のアドレス: https://nodejs.org/en/docs/ guides/blocking-vs-non-blocking/
プログラミング関連の知識については、プログラミング ビデオをご覧ください。 !
以上がNodejsのブロッキングとノンブロッキングの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。