代码之家  ›  专栏  ›  技术社区  ›  Mohamad Alhamoud

为什么在处理客户机请求时异步模式比同步模式好?

  •  4
  • Mohamad Alhamoud  · 技术社区  · 14 年前

    我有一个客户机-服务器项目,正在寻找更好的方法来处理来自客户机的请求。有人建议异步模式比同步模式和线程池模式好。

    6 回复  |  直到 12 年前
        1
  •  7
  •   Hans Passant    14 年前

    是的,异步请求通常可以在不消耗线程的情况下进行处理。操作系统对它们有特殊的支持,比如重叠的I/O和完成端口。实际上,它们所做的是利用内核线程的开销,这是无论如何都需要的,因为驱动程序需要能够处理来自多个用户模式程序的多个请求。NET框架在其BeginXxx()方法中很容易利用这一点。

    异步代码中的错误处理非常困难。当EndXxxx()方法引发异常时,通常只有很少的上下文。它发生在一个回调线程上,远离主逻辑。好吧,当你可以耸耸肩“没有发生,让我们记录它”,总疯癫癫和redrum时,程序的状态取决于它。在后一种情况下,始终选择同步模式。

        2
  •  2
  •   chum of chance    14 年前

    你不想阻止用户界面。使用异步操作,您可以在等待服务器响应时执行其他操作。

        3
  •  2
  •   P.Brian.Mackey    14 年前

    异步模式允许您继续处理,而同步模式使您等待。

        5
  •  1
  •   Stephen Cleary    14 年前

    而且,当你开始 considering the complexities of error handling in protocol design 正确地

    如果双方发送的数据多于读取的数据,异步方法对于防止死锁也很重要;看见 this blog post 更多讨论。

    如果您希望在线程安全的包装器(具有更简单的错误处理)中获得异步I/O的可靠性优势和(大部分)性能优势,请考虑 Nito.Async 图书馆。

        6
  •  0
  •   6502    14 年前

    异步方法的不好的一面是,根据您的工具,代码可能非常难看和难以理解,并且如果计算不是琐碎的,并且由于错误,您的处理进入了一个无休止的循环,那么整个异步服务器将没有响应(因此可能应该添加一个看门狗)。