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