![]() |
1
7
是的,异步请求通常可以在不消耗线程的情况下进行处理。操作系统对它们有特殊的支持,比如重叠的I/O和完成端口。实际上,它们所做的是利用内核线程的开销,这是无论如何都需要的,因为驱动程序需要能够处理来自多个用户模式程序的多个请求。NET框架在其BeginXxx()方法中很容易利用这一点。
异步代码中的错误处理非常困难。当EndXxxx()方法引发异常时,通常只有很少的上下文。它发生在一个回调线程上,远离主逻辑。好吧,当你可以耸耸肩“没有发生,让我们记录它”,总疯癫癫和redrum时,程序的状态取决于它。在后一种情况下,始终选择同步模式。 |
![]() |
2
2
你不想阻止用户界面。使用异步操作,您可以在等待服务器响应时执行其他操作。 |
![]() |
3
2
异步模式允许您继续处理,而同步模式使您等待。 |
![]() |
4
1
|
![]() |
5
1
而且,当你开始 considering the complexities of error handling in protocol design 正确地 如果双方发送的数据多于读取的数据,异步方法对于防止死锁也很重要;看见 this blog post 更多讨论。 如果您希望在线程安全的包装器(具有更简单的错误处理)中获得异步I/O的可靠性优势和(大部分)性能优势,请考虑 Nito.Async 图书馆。 |
![]() |
6
0
异步方法的不好的一面是,根据您的工具,代码可能非常难看和难以理解,并且如果计算不是琐碎的,并且由于错误,您的处理进入了一个无休止的循环,那么整个异步服务器将没有响应(因此可能应该添加一个看门狗)。 |
![]() |
Jess The Witch · GCP云功能中处理延迟任务的模式 5 月前 |
![]() |
Plup · 连接失败时,PyMongo异步客户端未引发异常 6 月前 |
![]() |
user1233894 · 尝试从全局函数传递值 6 月前 |
![]() |
Fabiano Taioli · 管理单线程Rust中的阻塞函数 9 月前 |
![]() |
river7816 · 为什么spdlog不在async函数中打印 10 月前 |