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

Moh*_*oud 4 c# asynchronous client-server

我有一个客户端 - 服务器项目,并正在寻找更好的方法来处理客户端的请求.有人建议异步模式比同步模式和线程池模式更好.
我的问题是为什么?异步模式有缺点吗?

Han*_*ant 7

是的,通常可以在不花费线程的情况下处理异步请求.操作系统对它们有特殊支持,例如重叠I/O和完成端口等功能.他们本质上做的是利用内核线程的费用,无论如何都需要,因为驱动程序需要能够处理来自多个用户模式程序的多个请求..NET框架在其BeginXxx()方法中很容易利用它.

使用线程池线程也很便宜,但是你受到线程池调度程序的行为的影响.这与创建更多TP线程并不像核心那么多.TP线程永远不应该用于可以暂时阻塞的代码,这对于连接等CS任务来说非常典型.

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