gpt4 book ai didi

异步和非阻塞调用?也在阻塞和同步之间

转载 作者:行者123 更新时间:2023-12-03 03:57:54 29 4
gpt4 key购买 nike

异步调用和非阻塞调用有什么区别?还在阻塞和同步调用之间(请举例)?

最佳答案

在许多情况下,它们是同一事物的不同名称,但在某些情况下它们却截然不同。所以这取决于。整个软件行业的术语应用方式并不完全一致。

例如,在经典套接字 API 中,非阻塞套接字只是立即返回一条特殊的“将阻塞”错误消息,而阻塞套接字则会阻塞。您必须使用单独的函数,例如 selectpoll 来确定何时是重试的最佳时机。

但是异步套接字(由 Windows 套接字支持)或 .NET 中使用的异步 IO 模式更为方便。您调用一个方法来启动一个操作,框架完成后会回调您。即使在这里,也存在基本差异。异步 Win32 套接字通过传递 Window 消息将其结果“编码”到特定的 GUI 线程,而 .NET 异步 IO 是自由线程的(您不知道将在哪个线程上调用回调)。

所以它们并不总是意味着同样的事情。为了提炼套接字示例,我们可以说:

  • 阻塞和同步意味着相同的事情:您调用 API,它挂起线程,直到它得到某种答案并将其返回给您。
  • 非阻塞意味着如果无法快速返回答案,API将立即返回并显示错误,并且不执行任何其他操作。所以必须有一些相关的方法来查询API是否准备好被调用(即以高效的方式模拟等待,避免在紧密循环中手动轮询)。
  • 异步意味着 API 总是立即返回,已启动“后台”工作来满足您的请求,因此必须有一些相关方法获取结果。

关于异步和非阻塞调用?也在阻塞和同步之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625493/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com