50

イベント駆動型と非同期は、多くの場合、同義語として使用されます。2つの間に違いはありますか?

epollまた、との違いは何aioですか?それらはどのように組み合わされますか?

最後に、LinuxのAIOがひどく壊れていることを何度も読みました。それはどのくらい正確に壊れていますか?

ありがとう。

4

4 に答える 4

28

イベントは、非同期実行を実現するためのパラダイムの1つです。ただし、すべての非同期システムがイベントを使用するわけではありません。これは、これら2つの意味の意味についてです。1つはもう1つのスーパーエンティティです。

epollとaioは異なるメタファーを使用します。

epollはブロック操作です(epoll_wait())-何らかのイベントが発生するまでスレッドをブロックしてから、コード内のさまざまなプロシージャ/関数/ブランチにイベントをディスパッチします。

AIOでは、コールバック関数(完了ルーチン)のアドレスをシステムに渡し、何かが発生するとシステムが関数を呼び出します。

AIOの問題は、コールバック関数コードがシステムスレッドなどでシステムスタックの最上位で実行されることです。あなたが想像できるようにそれに関するいくつかの問題。

于 2011-04-30T22:43:38.887 に答える
28

それらは完全に異なるものです。

イベント ドリブン パラダイムとは、何かが発生するたびに「イベント」と呼ばれるオブジェクトがプログラムに送信されることを意味し、その「何か」が定期的にポーリングされて発生したかどうかを検出する必要はありません。その「イベント」は、同期または非同期のいずれかのアクション (つまり、「ハンドラー」) を実行するために、プログラムによってトラップされる場合があります。

したがって、イベントの処理は同期または非同期のいずれかになります。たとえば、JavaScript は同期イベント システムを使用します。

非同期とは、現在の「メイン」実行ストリームとは無関係にアクションを実行できることを意味します。注意してください、それは「並列」または「異なるスレッド」を意味するものではありません。「非同期」アクションが実際にはメイン スレッドで実行され、その間「メイン」実行ストリームがブロックされる場合があります。したがって、「非同期」と「マルチスレッド」を混同しないでください。

技術的に言えば、非同期操作は自動的にイベンティングを想定していると言うかもしれません。基になる O/S 自体) を使用して、操作が停止したことを通知します。したがって、非同期は常にイベント ドリブンですが、その逆ではありません。

于 2011-05-01T15:22:19.500 に答える
3

イベントドリブンは、特定のシナリオでイベントが登録される単一のスレッドです。そのシナリオに直面すると、イベントが発生します。ただし、その時点でも、各イベントは順番に発生します。それについて非同期は何もありません。Node.js(webserver)は、イベントを使用して複数のリクエストを処理します。

非同期は基本的にマルチタスクです。複数のスレッドまたはプロセスを生成して、特定の機能を実行できます。これは、各スレッドが独立していて、応答しやすい方法でメインスレッドとほとんど相互作用しないという意味で、イベント駆動型とはまったく異なります。Apache(Webサーバー)は、複数のスレッドを使用して着信要求を処理します。

于 2011-04-30T22:16:30.460 に答える