2017-04-13 2 views
1

ここでは、非同期関数と同期関数を区別する記事を紹介しました。異なる例と説明の私の理解から、同期関数はブロックされ、非同期関数はブロックされません。しかし、どちらかを使用することでパフォーマンス上の利点があるかどうかを知りたいですか?ノードJで同期よりも非同期関数を使用すると、パフォーマンス上の利点はありますか?

+0

コールバックや非同期/待機についてお聞きしますか? –

答えて

3

ノードJの同期よりも非同期関数を使用すると、パフォーマンス上の利点はありますか?

はい、node.js.で非同期、非ブロックAPI呼び出しを使用するには、大幅なパフォーマンス上の利点があります

node.jsのJavascriptがシングルスレッドであるため、同期ブロッキング関数を呼び出すと、そのブロッキング関数が終了するまでnode.jsが何も実行できなくなります。これが多くのユーザーの要求を処理するサーバーである場合、これは、この1つのブロッキング同期関数呼び出しが完了するまで、他のすべてのユーザー要求が何かを待つ必要があることを意味します。これは、マルチユーザーサーバーにとっては恐ろしいことです。

非同期非ブロッキングAPIを呼び出すと、非ブロッキングAPIがその処理を行っている間に、node.jsは他のリクエストに対して自由に動作します。これにより、サーバーの応答性とスケーラビリティが大幅に向上します。

実際に、多数のブロッキングと同期呼び出しを含む使用可能なマルチユーザーサーバープロセスを使用することはできません。それらは単にサーバーのスケーラビリティを損なうだけです。実際のOSスレッドですべての並列プロセスを処理する必要があり、スレッド同期APIを使用する必要があるスレッドシステムより軽量に拡張できるので、node.jsに最高のスケーラビリティ機能を提供するのはノンブロッキング非同期設計です共有データにアクセスするために使用します。

ここでは、自分のコンピュータでローカルに実行するシングルユーザースクリプトを作成しているとします(1回限りの処理の一部としてテキストファイルをまとめて処理する場合など) 。一度に複数のファイルを処理したり、一度に複数のユーザーのニーズに対応しようとしていない場合は、ブロッキングAPIコールと非ブロッキングAPIコールのどちらを使用するかにかかわらず、とにかくあなたのnode.jsプロセスが行うことは何もありません。この1つの場合のみ、実際にはブロッキングAPI呼び出しを使用してコード化する方が簡単です。

1

はい。 Nodeがシングルスレッドであるのは当然ですが、非同期関数を使用する方がより高速です。たとえば、ファイルがディスクから読み取られている間、またはhttp要求が完了するのを待っている間、ノードは他の処理を処理できます。

関連する問題