libevent,windows和.NET编程

Chr*_*ris 8 .net libevent

我尝试了很多开源软件,我注意到开源世界中有相当数量的服务器类型应用程序使用libevent来促进基于事件的处理,而不是产生多个线程来处理请求.

我也做了很多.NET编程(这是我的核心工作函数),我有兴趣了解libevent与.NET事件模型的关系..NET中的事件是否相当于C程序的libevent?我是否应该尝试学习libevent并尝试在自定义.NET服务器应用程序中使用它,或者使用标准的.NET事件模型基本相同?

Cor*_*rch 8

.NET事件和libevent并不等同,尽管它们共享抽象概念.

.NET事件允许CLR组件之间的非确定性通信.在C#中,组件是一个对象 - 事件是类成员.在其他语言中,如F#,不需要对象.事件允许消费者订阅在源中的特定条件下发生的通知 - 单击按钮,下载完成,发生异常等..NET事件的一些特征:

  • 它们与底层操作系统无关
  • 您可以为任何条件定义事件.
  • 它们本身并不是异步的(通知程序和通知的不一定同时运行,尽管它们可以是).

libevent允许操作系统和消费者之间的非确定性异步通信.这可能与.NET事件类似,因为它们都反转控制,但机制却截然不同.

  • libevent使用特定于操作系统的非阻塞I/O(/ dev/poll,kqueue,epoll)来提高性能.您的结果将根据您使用的操作系统和机制而有所不同.
  • libevent事件条件包括文件描述符,OS信号或超时中的状态更改.您无法定义任意回调条件.
  • libevent本质上是异步的.消费者在等待操作系统返回时不会阻塞.

我应该尝试学习libevent并尝试在自定义.NET服务器应用程序中使用它吗?

如果你这样做是为了好玩,当然.如果你是为工作而做,可能不是.libevent声称它在*nix系统上获得了最大的性能提升.Windows使用不同的网络范例.libevent开发人员正在解决版本2中的这些差异,但2.0.5仍然是测试版.

此外,.NET还提供了自己的非阻塞I/O库,包括异步套接字.