1. ホーム
  2. programming-languages

[解決済み] 何が違うの?非同期、ノンブロッキング、イベントベースアーキテクチャの違いとは?

2023-03-09 20:31:39

質問

  1. 何が違うのでしょうか。

    • 非同期 ,
    • ノンブロッキング そして
    • イベントベース アーキテクチャは?
  2. 何かが 非同期 ノンブロッキング (そして イベントベース )?

  3. プログラミングで最も重要なことは、非同期、ノンブロッキング、イベントベース(あるいは3つとも)の何かを持つことですか?

例を提示していただけると助かります。

この質問をするのは、私がこの素晴らしい スタックオーバーフロー を読みましたが、上記の私の質問には答えてくれませんでした。

どのように解決するのですか?

非同期 Asynchronousは文字通り同期でないことを意味します。電子メールは非同期です。メールを送ったら、すぐに返事が来るとは限りません。しかし、ノンブロッキングではありません。基本的には、すぐに応答が返ってくることを期待せずに、コンポーネント同士がメッセージを送り合うようなアーキテクチャを意味します。HTTPリクエストは同期型です。リクエストを送信し、レスポンスを取得します。

ノンブロッキング この用語は主にIOで使われます。この意味は、システムコールを行うとき、スレッドをスリープさせることなく(高い確率で)その結果を持ってすぐに戻るということです。たとえば、ノンブロッキングのリード/ライトコールは、できる限りのことをやって戻り、呼び出し側が再びコールを実行することを期待します。これは、ロックを獲得できる場合にのみロックする。システムコールの通常のセマンティクスはブロッキングです。読み出しは、いくつかのデータを持って、呼び出しスレッドをスリープ状態になるまで待機します。

イベントベース select/epoll/IOCompletionPort などは、これらの呼び出しがいつ興味深いデータを返すかをOSから知るためのさまざまなメカニズムです。ノンブロッキング IO は、Event-base と密接に関係しています。

これらの用語は重複していると思います。例えば、HTTPプロトコルは同期ですが、ノンブロッキングIOを使用したHTTP実装は非同期にすることができます。また、read/write/try_lockのようなノンブロッキングAPIコールは同期ですが、quot;データ処理"は非同期です。