非同期プログラミングのNode.jsの

>公共の数のオリジナル記事:猿周Xiansenプログラム。このプラットフォームは、私の記事のように、私はマイクロチャンネル公衆番号への関心を歓迎し、定期的に更新されていません。![ファイル](https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133629699-504481514.jpg)実際には、ほとんどの開発者のために、直線的な考え方とは非同期プログラミングは、自然言語があるだろう競合。だから、ほとんどの開発者は、直接・ツー・イベントドリブン型のプログラムを満たすことができない、のNode.jsはアプリケーションレベルの非同期プログラミングプラットフォームを持参する最初で、Node.jsのは、すべての時間は、非同期を蒸散しました。ノードを接触させる工程の後、多くの人々は非常にラフな非同期プログラミングを使用してノード本当に、あきらめて、いくつかのコールバックを接触させ、コールバックは地獄に落ちるのは簡単ですが、ノードの非同期プログラミングは、基本的には、実際に問題を解決してきた、イベントによって解放することができます/サブスクリプションモデル、または約束/ Defferredモードでは、実際には、問題のコールバックトラップを解決するために完璧なことができます。実際には、ほとんどの人が考えるように考えて線形に慣れているので、同期プログラムは非常に人気となっています。しかし、シングルスレッド同期モデル、CPUおよびI / O動作が重ならないので、パフォーマンスの問題は、開発者の正面に配置されます。ほとんどの言語では、方法は、解決するために、一般的なマルチスレッドアプローチのパフォーマンスを向上させるが、スレッド内の複数のスレッドは、オーバーヘッドコストだけでなく、ロックやスレッドの同期の問題を切り替えるので、マルチスレッドでは、ビジネス・ロジック・トラブルの開発者に提供します。お互いを待たずにノードと直接非同期プログラミング、CPUと並列にI / O操作は、リソース待機のより有効に活用することができます。**非同期の非ブロッキングIOとIO **ノンブロッキングIO差は、すぐに私たちが行って、最終的なデータによって返されませんでした完了していない、完全なI / Oによるものであるが、唯一の必要な完全なデータを得るためには、コールの現在の状態を返します。完了を確認するためにI / O操作を繰り返しポーリングと呼ばれます。非同期I / Oは、リスニング操作を完了するために下からキャッシュに書き込まれたデータは、直後に帰国した後、I / O操作を実行、データの読み出しの完了を待たずに実装し、アプリケーションに成功または失敗の情報を返すことができます。Node.jsのの最大の利点の**非同期プログラミングの利点は、イベント駆動型に基づいて、ノンブロッキングI / Oモデルよりもリソースが良くなることができるように、非ブロックI / Oは、お互いを待たずにCPUとI / O操作を可能にそれは使用しています。ノード。パフォーマンスの問題JSプログラミングモデル場合のNode.js指向プログラミングの駆動、大規模な顔を要求する必要があるため、問題はより適切なI / O集約型のNode.jsのように、シングルスレッドI / O、非同期モデルブロッキングを解決するために大量のリクエストが同時に単一のスレッドに作用するいずれかのタイムスライスを要求するだろう、過剰消費を防止する必要があります。限り高性能V8エンジンと相まって非同期モデルのNode.jsの使用の合理化、など、それはCPUとI / Oの並列処理の利点を十分に発揮することができます。**バックエンドJavaScriptが実用的な値を反映するように、シングルスレッドパフォーマンスのボトルネックを破る、非同期I / OモデルとV8エンジンによって非同期プログラミングの難しさをNode.jsの。非同期プログラミングだけでなく、開発者がいくつかの困難をもたらすでしょうので。**(1)**深く複数の結合事象の存在下で、一般的にあまり結合遠位JavScript、DOMイベントにネストされた関数。一般的には、さまざまなDOM要素のためのさまざまなイベントを結合します。![ファイル](https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133629997-101116599.jpg)が、シーンがたくさんあるのNode.js、複数の非同期呼び出しのため。![ファイル](https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133630207-564054573.jpg)実際には、最終的な結果のために、このような機能は、ネストされた構造は問題ありませんが、このNode.jsのは、パラレル利点からの非同期I / Oを有効に利用することはありません。そして後半に開発者向け深すぎるネストされた関数は、メンテナンスの困難を引き起こす可能性があります。**(2)**ブロックコードJavaScriptで、Javaに似ていないスリープ()関数でこのスレッドの睡眠、あなたは操作のみのsetInterval()とのsetTimeout()この2つの関数を遅らせることができます。だから我々はそれを行う方法をJavaScriptで遅延1Sを実装する必要がある場合は?実際には、ほとんどの開発者はこれを達成することかもしれ:! [ファイル](HTTPS://img2018.cnblogs。COM /ブログ/ 830272/201909 / 830272-20190921133630451-217911039.jpg)が、ので、このコードのためのすべてのCPUリソースが実行時に提供されます、Node.jsのは、シングルスレッドモデルであることを覚えておいてください。無視されている他のすべての要求を引き起こします。だから我々は:! [ファイル](https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133630715-149423078.jpg)を方が良いだろうsetTimeoutメソッドを使用してコードを書き換えることができますが、質問があれば、そこにあるI後で時間が0に設定されている、それはすぐに、それは意味のコードを実行されていませんか?私たちは、直接公共の利益のために答えが、私は速やかに対応いたします、メッセージに番号を付けることができ、この質問について考えることができます。**(3)マルチスレッドプログラミングモデル**のNode.jsは、サーバのシングルスレッド、マルチコアCPUであるため、単一のプロセスのNode.js事実は、完全に利用多コアCPUではないので、ブラウザのJavaScriptとUIとすることができます分離をレンダリング、コンピューティングサービスの多くを行うために、マルチコアCPUを活用するために改善することができます。しかし、この開発モデルの開発者は、クロススレッドプログラミングに直面している、JavaScriptがシングルスレッドプログラミングは難しさのある程度のためのルートを増加させるために行かなければなりません。**(4)例外処理**私たちは、キャプチャし、異常な使用のJavaの例外処理における例外処理はのtry / catch / finally文から直接することができ、実際には非常に便利です。![ファイル](https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133630945-1147187223.jpg)が、フロントが話されているので、適用されません非同期プログラミングでは、この従来の例外処理非同期プログラミング非同期I / O例外が、一般的に、この段階では発生しないので、すぐにあなたがキャプチャに役割を果たしてするつもりはない、このコードののtry / catch異常動作を行い、この時間を返すように要求を提出した後ためのtry / catchのみ例外は、この事件のキャプチャに発生した場合に、返された例外スロー事実を終了イベントのコールバック関数コールバックの実行は無力なので、ノード。それが空の場合JSは、コールバック関数コールバックリターンの最初の引数として、異常、それは例外をスローすることなく、そのコールバック関数を意味します。例外はcheckLoginが行わ発生した場合、コード上![ファイル](https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133631199-1527212806.jpg)は、最初のパラメータのコールバック関数は誤るありません空で、私たちは、このパラメータERRに基づいて例外を処理することができるようになります。** ** 1.非同期プログラミングソリューションイベントモデル1.約束/繰延モード1により、プロセス制御ライブラリプログラムは3つの知識ポイントがより多くの混合が含まパブリッシュ/サブスクライブ、この記事では、これら三つのプログラムのために特別に導入されていません、次の記事では具体的な説明のための3つのプログラムを持っています。** ** Node.jsの非同期同時実行制御では、我々は非常に簡単に並列非同期打ち上げコールを利用することができますが、ファイルシステムは、同時呼び出しが多数ある場合は、過剰な同時実行すれば、私たちのサーバは、例えば、負担になります、ファイルディスクリプタ・オペレーティング・システムの数が瞬時にまで使用されます。だから、非同期並行プログラミングのために、実現するのは簡単ですが、特定の過負荷を持っている必要があります。ここでは主にソリューションの過負荷を話す:非同期非同期は、ハンドルの非同期呼び出しを制限するための方法parallelLimit()を提供します。![ファイル](https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133631433-49340192.jpg)parallelLimit()メソッドは、特定のタスクが唯一の同時することができるように、同時の数を制限するためのパラメータであり、数ではなく、同時の無制限。上記のコードは、我々は同時1の数、これだけの同時タスクを設定します。しかしparallelLimitは()1つの欠点を持っている:あなたは、動的並列タスクを追加することはできません。しかし、非同期キュー()メソッドを動的なファイルディレクトリトラバーサルなどの操作のための非常に効率的である並列タスクを追加することができます提供します。しかし、キューは()、パラメータが固定されている受信parallelLimit()多様性を失いました。![ファイル](HTTPS://img2018.cnblogs。

おすすめ

転載: www.cnblogs.com/niyueling/p/11562819.html