イベント駆動型と非同期の違いは何ですか?エポールとアイオの間?
-
27-10-2019 - |
質問
イベント駆動型および非同期は、よく同義語として使用されます。 2つの間に違いはありますか?
また、間の違いは何ですか epoll
と aio
?それらはどのように一緒にフィットしますか?
最後に、LinuxのAIOが恐ろしく壊れていることを何度も読みました。それは正確に壊れていますか?
ありがとう。
解決
イベントは、非同期実行を達成するためのパラダイムの1つです。しかし、すべての非同期システムがイベントを使用するわけではありません。それはこれら2つのセマンティックな意味についてです - 1つは別のものの非常にエンティティです。
ePollとAIOは異なるメタファーを使用します:
ePollはブロッキング操作です(epoll_wait()
) - いくつかのイベントが発生するまでスレッドをブロックし、イベントをコード内のさまざまな手順/関数/ブランチに派遣します。
AIOでは、コールバック関数(完了ルーチン)のアドレスをシステムに渡し、システムが何かが発生したときに関数を呼び出します。
AIOの問題は、コールバック関数コードがシステムスレッドなどで実行されるなど、システムスタックの上に実行されることです。あなたが想像できるように、それに関するいくつかの問題。
他のヒント
それらは完全に異なっています。
イベント主導のパラダイムは、「イベント」と呼ばれるオブジェクトが、何かが起こるたびにプログラムに送信されることを意味します。その「イベント」は、いくつかのアクション(つまり、「ハンドラー」)を実行するためにプログラムによって閉じ込められている可能性があります - 同期または非同期のいずれか。
したがって、イベントの処理は同期または非同期である可能性があります。たとえば、JavaScriptは同期イベントシステムを使用します。
非同期とは、アクションが現在の「メイン」実行ストリームとは無関係に発生する可能性があることを意味します。気をつけて、そうです いいえ 平均「平行」または「異なるスレッド」。 「非同期」アクションは、実際にメインスレッドで実行され、その間に「メイン」実行ストリームをブロックする場合があります。したがって、「非同期」と「マルチスレッド」を混同しないでください。
あなたは、技術的に言えば、非同期操作を自動的に言うかもしれません 仮定します イベント - 少なくとも「完了」、「障害」、または「中止/キャンセルされた」イベント(これらの1つ以上)は、操作の扇動者(または基礎となるO/s自体)に送られ、操作が停止したことを示す。したがって、Asyncは常にイベント駆動型ですが、逆ではありません。
イベント駆動型は、特定のシナリオにイベントが登録される単一のスレッドです。そのシナリオに直面すると、イベントが発生します。ただし、その時でさえ、各イベントは連続的に発射されます。それについて非同期は何もありません。 node.js(webserver)は、イベントを使用して複数のリクエストに対処します。
非同期は基本的にマルチタスクです。特定の関数を実行するために、複数のスレッドまたはプロセスを生成する可能性があります。それは、各スレッドが独立しており、メインスレッドと簡単に対応していないという意味で駆動されるイベントとはまったく異なります。 Apache(WebServer)は、複数のスレッドを使用して、着信リクエストに対処します。