我尝试了很多开源软件,我注意到开源世界中相当多的服务器类型应用程序使用 libevent 来促进基于事件的处理,而不是产生多个线程来处理请求。
我还做了很多 .NET 编程(这是我的核心工作职能),并且我有兴趣了解 libevent 如何与 .NET 事件模型相关联。.NET 中的事件是否等同于 C 程序的 libevent?我应该尝试学习 libevent 并尝试在自定义 .NET 服务器应用程序中使用它,还是使用基本相同的标准 .NET 事件模型?
.NET 事件和 libevent 并不等价,尽管它们共享抽象概念。
.NET 事件允许 CLR 组件之间的非确定性通信。在 C#中,组件是一个对象 - 事件是类成员。在其他语言中,例如 F#,不需要对象。事件允许消费者订阅源中特定条件下发生的通知 - 单击按钮、下载完成、发生异常等。.NET 事件的一些特征:
libevent 允许在操作系统和消费者之间进行非确定性的异步通信。这可能感觉类似于 .NET 事件,因为它们都反转控制,但机制非常不同。
我是否应该尝试学习 libevent 并尝试在自定义 .NET 服务器应用程序中使用它...?
如果你是为了好玩,当然可以。如果你是为了工作,可能不会。libevent 声称它在 *nix 系统上获得了最大的性能提升。Windows 使用不同的网络范例。libevent 开发人员正在解决版本 2 中的这些差异,但 2.0.5 仍然是 beta 版本。
此外,.NET 提供了自己的非阻塞 I/O 库,包括异步套接字。