一、同步与异步

先来个概念性的东西:

 同步.异步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,而异步则直接返回

例子:

同步:老妈叫小明去烧一壶开水,小明就在旁边等开水开为止。

异步:小明把那壶水放下去烧,然后没有等待,等烧水响了再过来

同步异步的区别就是:是否等待返回的结果,同步等待,异步则不等待

 

二、阻塞与非阻塞

概念:

 阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。

非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

例子:

阻塞:老妈叫小明去烧一壶开水,小明就在旁边等开水开为止。(同步:一直关注水壶等待着     阻塞:不能做其他事情);

非阻塞:小明去烧一壶开水,是否烧开,就去房间打王者荣耀了,(非阻塞:可以干其他事情);水烧开了再出来关了(异步:因为不需要自己去等待)

阻塞与非阻塞的区别就是:能否做其他事情,阻塞时候,线程被挂起,不能做其他事情,而非阻塞可以

可以参考:https://www.cnblogs.com/Anker/p/5965654.html

深入理解可以参考:http://blog.csdn.net/historyasamirror/article/details/5778378

 

对应 bio nio  aio 的相关知识链接

https://blog.csdn.net/madongyu1259892936/article/details/79311671

 

 

 

 

 

劫匪冲进某花园小别墅,端着AK47,向某衰男甩过去一个袋子:说,快,把现金拿出来给我放进去,这个时候劫匪一直跟着衰男去装钱,看钱装满了他就拿走,此时劫匪是阻塞 的,因为劫匪不能干其他的,得看着这个衰男,免得他搞鬼。

想象下,如果劫匪等衰男自己去装钱,在钱装满之前,他自己可以到处翻箱倒柜,找点值钱的首饰黄金之类的,那么这个时候劫匪就是非阻塞 的,因为劫匪并没有阻塞在衰男去装钱这个环节上,劫匪可以自由活动做点其他的小买卖。

再来回顾下上面的情节,如果劫匪在抢劫时需要不时自己看看衰男把钱装好了没有,那么此时劫匪是在同步 工作,因为他在等待衰男把钱装好,自己要不停的关注下。

当然,劫匪可以给衰男说:把钱装好了,你自己过来找我。这个时候劫匪可以继续等着不做其他的事情,也可以去做点其他的事情,但是劫匪可以不用去看衰男是否把钱装好,因为衰男钱装好了会自动通知劫匪:大哥,钱好了,你拿走吧。这个时候劫匪就是异步 在工作,他提供了一个callback机制给衰男。

 

可以总结下了:

同步/异步: 消息通知机制相关=>需要自己关注还是提供callback

阻塞/非阻塞:等待消息时的状态=>是否可以干别的事情

 

可以相互组合:

同步阻塞: 劫匪看着衰男把钱装好,不能干其他事情

同步非阻塞:劫匪自己也到处搜索宝贝,但是还要不时跑回来看看钱装好没有。

异步非阻塞:劫匪自己也到处搜索宝贝,衰男把钱装好了自动过来告诉劫匪好了

异步阻塞: 劫匪就在那里傻等着,也不用管钱是否装好,衰男把钱装好了自动过来告诉劫匪好了

 

posted on 2017-12-19 16:21  我是坏男孩  阅读(237)  评论(0编辑  收藏  举报