【问题标题】:Is there a C# reactor/proactor library?有 C# reactor/proactor 库吗?
【发布时间】:2009-06-10 00:26:00
【问题描述】:

我希望将 Windows C++ 应用程序迁移到 C#,以便一些主要的增强功能更容易一些。 C++ 应用程序是单线程的,并使用自制的反应器模式来处理接受、读取和写入套接字和计时器的所有事件。所有套接字处理都是异步完成的。

实现 C# 反应器模式的公认方法是什么?是现有的图书馆吗?

【问题讨论】:

    标签: c# design-patterns asynchronous


    【解决方案1】:

    布罗菲尔德,

    不幸的是,C# 世界的心态仍然存在于每个连接领域的线程中。我正在寻找一种在单个 Compact Framework/Windows CE 机器上处理多个连接的方法,并希望编写自己的 Proactor/Reactor 模式(仿照 ACE 中使用的模式)Compact Framework 似乎不支持异步连接 -只是异步读写。我还需要严格控制超时(软实时应用程序)。

    艾伦,

    实现前摄器/反应器模式的一个原因是您不必为每个连接都运行一个线程。 Web 服务器就是典型的例子。一个繁忙的服务器在任何时候都可以轻松地拥有 100 多个处于活动状态的连接。有了这么多线程(我已经看到有一个线程读取,另一个线程写入数据的实现),在上下文切换中花费的时间变得很重要。在 750Mhz ARM 处理器上的 Windows CE 下,我测量了超过 1 毫秒,峰值高达 4 毫秒。

    我仍然发现我遇到的大多数 C# 和 Java 应用程序仍然有太多的线程在运行。似乎是一切的解决方案 - 启动另一个线程。例子。甚至在我实际打开一个项目之前,Eclipse(IDE)就使用了 44 个线程。 44线程???到底要做什么???这就是 Eclipse 这么慢的原因吗?

    【讨论】:

      【解决方案2】:

      阅读Asynchronous Programming in C# using Iterators

      在本文中,我们将了解如何编写执行异步操作的程序,而无需典型的控制反转。简要介绍一下我所说的“异步”和“控制反转”的含义——异步是指执行一些不需要阻塞调用线程的长时间运行操作的程序,例如访问网络、调用 Web 服务或执行任何其他操作一般的 I/O 操作。

      【讨论】:

        【解决方案3】:

        Windows 内核有一个非常好的异步等待 API,称为 I/O 完成端口,它非常适合实现反应器模式。不幸的是,.NET 框架中的 System.Net.Sockets 库并未将 I/O 完成端口完全公开给开发人员。 System.Net.Sockets 的最大问题是您无法控制哪个线程将异步完成事件出列。您的所有异步完成都必须发生在框架为您选择的某个随机全局 .NET ThreadPool 线程上。

        【讨论】:

          【解决方案4】:

          .NET 线程、套接字和事件处理在 C# 和 .NET 中具有一流的支持,因此对外部库的需求非常小。换句话说,如果您知道自己在做什么,该框架可以非常直接地滚动您自己的套接字事件处理例程。

          我工作的两家公司都倾向于重用默认的 .NET Socket 库,就像所有网络连接一样。

          编辑添加:基本上这意味着这是一个了解 .NET/C# 中的委托、事件、线程和套接字的绝佳机会

          【讨论】:

          • 不幸的是,这与问题的含义相去甚远。他问的是反应器/演员模式,你回答的是线程和套接字。
          【解决方案5】:

          检查SignalR。看起来很有希望。

          【讨论】:

            【解决方案6】:

            在谷歌代码上查看项目Interlace。我们在所有产品中都使用了这一点。

            【讨论】:

              猜你喜欢
              • 2019-11-06
              • 2011-07-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-02-13
              • 1970-01-01
              • 2013-03-15
              相关资源
              最近更新 更多