3

私は最近Node.jsで開発を行っており、イベントループまで何が起こっているのかをよく理解しています。私がjavascriptの経験を持っていることを考えると、Nodeは私が使用するのに理にかなっていますが、誰かがマルチスレッドシステムの使用をやめて、パフォーマンスのために非同期に行ったことがありますか?または、パフォーマンスのためにマルチスレッドではなく非同期を使用することを選択しましたか?

現実の世界でマルチスレッドに勝った非同期ノンブロッキングI/Oの実際の例は何ですか?

4

2 に答える 2

3

マルチスレッドを実行するかどうかに関係なく、最新のオペレーティングシステムのI/O操作はすべて本質的に非同期です。したがって、「非同期の方が速い」と言うのは実際には真実ではありません。ただし、非同期プログラミングを使用すると、ほぼ同じパフォーマンスでスレッドを節約できます。取得できるスレッドの数は有限であるため(使用可能なメモリによって制限されるため)、これはサーバーでは重要です。

したがって、非同期を使用すると、必ずしもパフォーマンスが向上するわけではありませんが、I/Oの重いタスクでスケーラビリティが向上します。サーバーコア間で作業を並列化するメリットがないため、非同期はCPUを集中的に使用するタスクでさらにパフォーマンスが低下する可能性があります。一方、I / Oは、CPUを含まない割り込みとDMAで機能します。これにより、ハードウェアが割り込みを通知してI / Oの完了を通知するまで実行を続けることができるため、十分なパフォーマンスを得ることができます。

編集:私はあなたの実際の質問に答えなかったことがわかりました。しかし、非同期がどのように役立つかを知っている限り、実際の例は必要ないかもしれません。それを知ってください:

  • データベースとの通信はI/Oです
  • ディスクからの読み取りまたはディスクへの書き込みはI/Oです
  • ネットワークを介したパケットの送受信はI/Oです
  • 残りはCPUです

I / OとCPUのどちらを使用するかによっては、非同期性を高めると、スケーラビリティが向上したり、パフォーマンスが低下したりする可能性があります。通常、WebアプリケーションはI / Oを集中的に使用するため、非同期プログラミングの恩恵を受けます。

于 2012-06-15T19:59:19.793 に答える
0

複数のプロセス/スレッド間の一貫性/データ交換を管理する必要がないため、コーディングが簡単です。
単純なWebアプリケーションを作成する場合、このモデルに実際の利点はありませんが、サーバーが同時に複数の接続を管理する場合、渡されるデータは何らかの形で結び付けられます。

パフォーマンスに関しては、複数のスレッド/プロセスを持つと、単一のスレッドよりもはるかに多くのメモリを使用する傾向があるため、いくつかの利点があります。
簡単な計算:1つのスレッドで1つの接続を処理し、各スレッドに1MBのRAMが必要な場合、1台のコンピューターでどれだけの接続が可能かを簡単に把握できます。node.jsを使用すると、1つのプロセスで複数の接続を処理できます。たとえば、RAMに20MB、新しい接続ごとに4kbが必要です。私はあなたがその考えを理解したと思います。
非同期I/Oは高速ではありませんが、同じことを複数回同時に実行しながら、より少ないリソースを消費するのに役立ちます。

于 2012-06-15T19:49:13.453 に答える