同步与异步VS阻塞与非阻塞概念区分

同步与异步:Synchronous and asynchronous:

  • 在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO。在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了。
  • 另一种解决IO问题的方法是异步IO。当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理。

阻塞与非阻塞:Blocking and non-blocking:

个人理解:非阻塞API意味着不能立即返回结果时,如果调用失败,需要等待后重复尝试;而阻塞和同步在调用API后,将等待至有结果返回。


许多情况下,它们(Synchronous and Blocking, Asynchronous and non-blocking )是相同事物的不同名称,但在某些上下文中,它们得内涵又有很大差别。因此,这些单词表达的意义需要视情况而定。实际上,在整个软件工业史上,术语有些时候不能达到完全一致。

例如,在经典套接字API中,非阻塞套接字只是立即返回一个特殊的“would block”错误消息,而阻塞套接字则会被阻塞。 你必须使用一个单独的函数,如selectpoll来找出何时是重试的好时机。

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

所以他们并不总是意味着同样的事情。 总结以上套接字的例子,我们可以说:

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

引用自StackOverflow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值