.net - libevent、windows 和 .NET 编程

标签 .net libevent

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

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

最佳答案

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

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

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

  • libevent 允许 之间的非确定性异步通信操作系统 和消费者。这可能与 .NET 事件类似,因为它们都反转控制,但机制却大不相同。
  • libevent 使用特定于操作系统的非阻塞 I/O( /dev/poll, kqueue, epoll ) 来提高性能。您的结果会因您使用的操作系统和机制而异。
  • libevent 事件条件包括文件描述符、操作系统信号或超时的状态更改。您不能定义任意的回调条件。
  • libevent 本质上是异步的。消费者在等待操作系统返回时不会阻塞。

  • Should I try to learn libevent and attempt to use it in custom .NET server applications...?



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

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

    关于.net - libevent、windows 和 .NET 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078024/

    相关文章:

    c# - 排除 'Else' 子句是否有性能差异?

    .net - 如何在基于 MFC 对话框的项目中引用 .net 编码库

    c - libevent 在 ubuntu 服务器 14.04 上的链接问题

    c - 我是否必须在多线程服务器中使用互斥锁保护 bufferevent_write

    ubuntu - 在 Ubuntu 12.04 上安装 tmux_1.8 时出现 libevent 错误

    c# - 如何在Asp.net和C#中将GridView数据导出到pdf文件?

    .net - 停止 .NET Firebird (2.6.5) 提供程序将所有 SQL 写入控制台

    .net - 从 .net 中的 xsd 架构文件中提取枚举值

    c - 使用 libevent 的异步 Redis 池

    multithreading - Libevent 多线程支持