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

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

有帮助吗?

解决方案

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

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

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

libevent 允许非确定性的、异步的通信 操作系统 和一个消费者。这可能感觉与 .NET 事件类似,因为它们都是反转控制,但机制却非常不同。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top