我有一个客户端-服务器项目,正在寻找更好的处理客户端请求的方法。一些人建议异步模式比同步模式和线程池模式更好。
我的问题是为什么?异步模式有什么缺点吗?
我有一个客户端-服务器项目,正在寻找更好的处理客户端请求的方法。一些人建议异步模式比同步模式和线程池模式更好。
我的问题是为什么?异步模式有什么缺点吗?
您不希望阻塞用户界面。使用异步操作,您可以在等待服务器响应时执行其他操作。
异步模式让您在处理过程中继续进行,而同步模式则需要等待。
同步操作的一个缺点是,我认为你无法中断它们 - 例如,当您的服务器应用程序调用同步方法WaitForConnection()并且没有客户端连接时,您无法停止等待...
跟随Hans的回答:I/O操作与线程的独立性允许更显著的扩展;可以处理成千上万个未完成请求,这是使用线程无法实现的。
此外,当您开始考虑协议设计中错误处理的复杂性时,异步方法的复杂度要比正确地编写同步代码的复杂度小得多。大多数同步套接字代码看起来很简单,但实际上包含微妙的错误。
如果双方发送的数据超过读取的数据,异步方法也很重要,以防止死锁情况;有关更多讨论,请参见此博客文章。
如果您想要异步I/O的可靠性和(大部分)性能优势,并带有线程安全的包装器(具有更简单的错误处理),请考虑使用Nito.Async库。