libevent、windows 和 .NET 编程

Posted

技术标签:

【中文标题】libevent、windows 和 .NET 编程【英文标题】:libevent, windows and .NET programming 【发布时间】:2009-07-03 06:41:37 【问题描述】:

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

我还从事大量 .NET 编程(这是我的核心工作职能),并且我有兴趣了解 libevent 如何与 .NET 事件模型相关联。 .NET 中的事件是否等同于 C 程序的 libevent?我应该尝试学习 libevent 并尝试在自定义 .NET 服务器应用程序中使用它,还是使用基本相同的标准 .NET 事件模型?

【问题讨论】:

【参考方案1】:

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

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

它们不依赖于底层操作系统 您可以为任何条件定义事件。 它们本质上不是异步的(通知器和被通知者不一定同时运行,尽管它们可以同时运行)。

libevent 允许在 OS 和消费者之间进行非确定性的异步通信。这可能感觉类似于 .NET 事件,因为它们都反转控制,但机制非常不同。

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

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

如果您这样做是为了好玩,当然可以。如果你是为了工作,可能不会。 libevent 声称它在 *nix 系统上获得了最大的性能提升。 Windows 使用不同的网络范例。 libevent 开发人员在版本 2 中是 addressing these differences,但 2.0.5 仍然是测试版。

此外,.NET 提供了自己的非阻塞 I/O 库including asynchronous sockets。

【讨论】:

以上是关于libevent、windows 和 .NET 编程的主要内容,如果未能解决你的问题,请参考以下文章

workerman运行环境的libevent怎么安装

Windows cygwin gearman ./configure 显示“配置:错误:无法找到 libevent”错误

Windows 上的 Libev

libevent

libevent 和 libuv 是啥关系啊?

C10K问题和Libevent库介绍