关于同步异步、阻塞非阻塞的理解

来源:互联网 发布:域名反向解析作用 编辑:程序博客网 时间:2024/06/05 04:26

之前看到一个用来形容同步异步、阻塞非阻塞的比喻,感觉非常形象生动,这里把它记录下来。

场景:

你想买一本书,于是你给书店老板打电话询问,老板查询需要花费一段时间,帮你查询好以后告诉你结果,即书店有没有这本书。


解决方式:

一、同步

你给老板打通了电话,并一直等待该事件的结果,老板帮你查询的过程中不断电话,得到结果以后挂电话。


二、异步

你打电话告诉了老板你的目的以后,挂掉电话。老板查询到结果会打电话通知你。


三、阻塞

你打电话以后,自己会被“挂起”(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行),直到结果返回以后释放。


四、非阻塞

打电话以后,自己就去一边做别的事情了,不过需要时不时来检查一下结果是否返回。


总结:

1.从以上场景来看,同步异步的重点是在请求结果的返回方式不同,同步是调用者在主动等待这个结果,异步是被调用者通过某种方式来通知调用者结果。

2.阻塞非阻塞关注的是在调用请求发起以后的过程中,调用者即“我”的状态。

3.有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。

4.同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞!
阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回!

原创粉丝点击