8

私は多くのオープン ソース ソフトウェアを試してみましたが、オープン ソースの世界では、要求を処理するために複数のスレッドを生成するのではなく、イベント ベースの処理を容易にするために libevent を使用するサーバー タイプのアプリケーションがかなりの数あることに気付きました。

また、多くの .NET プログラミングも行っており (これが私の中心的な仕事です)、libevent が .NET イベント モデルにどのように関係しているかを知りたいと思っています。.NET のイベントは、C プログラムの libevent と同等ですか? libevent を学習してカスタム .NET サーバー アプリケーションで使用する必要がありますか、それとも標準の .NET イベント モデルを使用しても基本的に同じですか?

4

1 に答える 1

8

.NETイベントとlibeventは同等ではありませんが、抽象的な概念を共有しています。

.NETイベントにより、CLRコンポーネント間の非決定的な通信が可能になります。C#では、コンポーネントはオブジェクトです。イベントはクラスメンバーです。F#などの他の言語では、オブジェクトは必要ありません。イベントを使用すると、コンシューマーは、ソース内の特定の条件で発生する通知をサブスクライブできます。ボタンがクリックされ、ダウンロードが完了し、例外が発生したなどです。.NETイベントのいくつかの特徴:

  • それらは基盤となるOSに結び付けられていません
  • 任意の条件のイベントを定義できます。
  • それらは本質的に非同期ではありません(通知機能と通知機能は必ずしも同時に実行されているとは限りませんが、同時に実行されている可能性があります)。

libeventを使用すると、 OSとコンシューマー間の非決定論的な非同期通信が可能になります。どちらも制御の反転があるため、これは.NETイベントに似ているように感じるかもしれませんが、メカニズムは大きく異なります。

  • libeventは、OS固有の非ブロッキングI / O(/ dev / poll、kqueue、epoll)を使用してパフォーマンスを向上させます。結果は、使用するOSとメカニズムによって異なります。
  • libeventイベント条件には、ファイル記述子、OSシグナル、またはタイムアウトの状態変化が含まれます。任意のコールバック条件を定義することはできません。
  • libeventは本質的に非同期です。OSが戻るのを待っている間、コンシューマーはブロックしません。

libeventを学習して、カスタム.NETサーバーアプリケーションで使用する必要があります...?

あなたが楽しみのためにそれをしているなら、確かに。あなたが仕事のためにそれをしているなら、おそらくそうではありません。libeventは、*nixシステムで最大のパフォーマンス向上を主張しています。Windowsは異なるネットワークパラダイムを使用します。libevent開発者は、バージョン2でこれらの違いに対処していますが、2.0.5はまだベータリリースです。

さらに、.NETは、非同期ソケットを含む独自のノンブロッキングI/Oライブラリを提供します。

于 2010-06-14T18:53:51.983 に答える