您的位置:首页 > 其它

同步、异步、阻塞与非阻塞

2017-12-14 17:31 169 查看

转载:http://my.oschina.net/xianggao/blog/661085

同步和异步 

异步的概念和同步相对
。当一个同步调用发出后,
调用者要一直等待返回消息(结果)通知后
,才能进行后续的执行;当一个异步过程调用发出后,调用者不能立刻得到返回消息(结果)。
实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者


这里提到执行部件和调用者通过三种途径返回结果:
状态、通知和回调
。使用哪一种通知机制,
依赖于执行部件的实现
,除非执行部件提供多种选择,
否则不受调用者控制



阻塞与非阻塞

阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务
。函数只有在得到结果之后才会返回。

有人也许会把阻塞调用和同步调用等同起来,实际上它们是不同的。

对于同步调用来说,很多时候当前线程可能还是激活的,只是从逻辑上当前函数没有返回而已,此时,这个线程可能也会处理其他的消息
。还有一点,在这里先扩展下:

(a) 如果这个线程在等待当前函数返回时,仍在执行其他消息处理,那这种情况就叫做同步非阻塞;

(b) 如果这个线程在等待当前函数返回时,没有执行其他消息处理,而是处于挂起等待状态,那这种情况就叫做同步阻塞;

所以同步的实现方式会有两种:同步阻塞、同步非阻塞;同理,异步也会有两种实现:异步阻塞、异步非阻塞;


对于阻塞调用来说,则当前线程就会被挂起等待当前函数返回;

非阻塞和阻塞的概念相对应,
指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回
。虽然表面上看非阻塞的方式可以明显的提高CPU的利用率,
但是也带了另外一种后果就是系统的线程切换增加
增加的CPU执行时间能不能补偿系统的切换成本需要好好评估
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: