非同期APIを使用する理由
非同期の概念がWeb2.0で人気になった理由は、JavaScriptがブラウザの単一のスレッドで実行され、UIレンダリング付きのスレッドも使用しているためです。これは、JavaScriptが実行されると、UIのレンダリングと応答が停滞していることを意味します。ユーザーエクスペリエンスの向上のために、非同期アプローチ(もちろん、これはいわゆるシングルスレッド言語です)は、メインスレッドをブロックせず、ユーザー操作に応答し続けます。これは、ユーザーエクスペリエンスのカテゴリに属します。
同様に、もちろん、他の言語の経験を持つエンジニアが、スレッド間のCPUの切り替えには多くの時間が必要であることを理解している場合(主にコンテキストとキャッシュ間の切り替え)、効率を改善することが非同期APIを使用する理由でもあります。
もちろん、これらは絶対に正しいわけではありませんが、誰もがそう言います。マルチスレッドの作成のオーバーヘッドが並列実行よりも少ない場合、マルチスレッドの方法が最初の選択であり、これはしばしばCPU集約型処理タスクと見なされるためです。
要するに、非同期IOまたは非同期APIは、アプリケーションレイヤーに非同期IOを適用するプラットフォームであり、単一のスレッドでより効率的にリソースを割り当てるよう努めているため、ノードの特徴と見なすことができます。
約束について
ここでは、この記事では、約束の使用を詳細に説明するつもりはありませんが、APIと試行の範囲の一部を簡単に説明します。
// nodejs 'fs.readdir関数を組み合わせてネイティブのPromisevar promisetask = new Promise(resolve、拒否){fs.readdir('/var/www '、function(files){if(!err){resolve(files);} else {demulest(err);}); console.log( 'コンテンツは次のとおりです。 promisetask.catch(function(err){console.log( 'エラーは:'+err);});複数の約束が完了するのを待つ方法は?
//上記のpromiseTask.then(function(files){var readfilsepromiseList = files.map(file、index){return new promise(function(resolve、required){file、 'utf-8'、function(err、str){if(!err){resolve(str)}; promise.all(readfilsepromiselist);})。このコードは、nodejs開発の優雅さを示しています。
では、何が問題なのでしょうか。
現在最もエレガントな言語は、まだオペレーティングシステムに依存しています。つまり、システムの制限はまだ存在します。
このエラーを使い果たしたファイル操作ハンドルとして解釈できるかどうかはわかりませんが、オペレーティングシステムが同時に無制限の複数のファイルを開くことができないというこの記事を理解できることを願っています。
そしてこれ:
これは理解しやすく、記憶は使い果たされます。もちろん、メモリの制限は、次の2つの実行パラメーターを追加することで調整できます。
node - max-old-space-size = 8192 ./index.js #unit mb node - max-new-space-size = 2048 ./index.js #unit kb
上記のパラメーターは、V8が初期化されている場合に有効になり、有効になると動的に変更できません。
多くの人々は、これら2つの制限が他の言語にも存在することを提案するかもしれません。はい、他の言語も存在します。
ただし、他の言語の強力なGCまたはマルチスレッドプログラミングモデルにより、システムリソースを申請した後、エンジニアが時間内にリリースできるようになります。
不要なシステムリソースはNodeJSで手動でリリースできますが、参照プログラムのすべての操作を時間内にリリースできますか?
たとえば、 NodeJS Redisパッケージ(NPMインストールRedis)は、同期操作方法を提供しません。
これは、開発プロセスでより多くのプロセス制御が必要であることを意味します。残念ながら、シングルスレッドシステムのnodejsはこれには良くありません。これは、マルチスレッドの概念もロックメカニズムもなく、通常の意味でセマフォメカニズムを含めることは不可能だからです。その結果、エンジニアはいつリソースを手動でリリースするかわからない。
プロジェクトを絶対に制御できない限り、非同期APIを使用するサードパーティパッケージは使用しません。
したがって、現在の結論は、約束は単なる開発手法であるということです。これらを理解することは、すべての開発シナリオには適していません。
要約します
上記は、Node.js非同期APIとその制限に関するすべてです。この記事がすべての人に役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとってください。