all

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

发布于 2022-03-22 22:43:33

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

关注者
0
被浏览
44
1 个回答
  • 面试哥
    面试哥 2022-03-22
    为面试而生,有面试问题,就找面试哥。

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

    例如,在经典的套接字 API
    中,非阻塞套接字是简单地立即返回并带有特殊的“将阻塞”错误消息的套接字,而阻塞套接字会阻塞。您必须使用单独的函数,例如selectpoll找出何时是重试的好时机。

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

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

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


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看