同步、异步、阻塞与非阻塞
2017-12-14 17:31
169 查看
转载:http://my.oschina.net/xianggao/blog/661085
同步和异步
异步的概念和同步相对。当一个同步调用发出后,
调用者要一直等待返回消息(结果)通知后,才能进行后续的执行;当一个异步过程调用发出后,调用者不能立刻得到返回消息(结果)。
实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
这里提到执行部件和调用者通过三种途径返回结果:
状态、通知和回调。使用哪一种通知机制,
依赖于执行部件的实现,除非执行部件提供多种选择,
否则不受调用者控制。
阻塞与非阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。函数只有在得到结果之后才会返回。
有人也许会把阻塞调用和同步调用等同起来,实际上它们是不同的。
对于同步调用来说,很多时候当前线程可能还是激活的,只是从逻辑上当前函数没有返回而已,此时,这个线程可能也会处理其他的消息。还有一点,在这里先扩展下:
(a) 如果这个线程在等待当前函数返回时,仍在执行其他消息处理,那这种情况就叫做同步非阻塞;
(b) 如果这个线程在等待当前函数返回时,没有执行其他消息处理,而是处于挂起等待状态,那这种情况就叫做同步阻塞;
所以同步的实现方式会有两种:同步阻塞、同步非阻塞;同理,异步也会有两种实现:异步阻塞、异步非阻塞;
对于阻塞调用来说,则当前线程就会被挂起等待当前函数返回;
非阻塞和阻塞的概念相对应,
指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。虽然表面上看非阻塞的方式可以明显的提高CPU的利用率,
但是也带了另外一种后果就是系统的线程切换增加。
增加的CPU执行时间能不能补偿系统的切换成本需要好好评估。
相关文章推荐
- 老张喝茶 教你同步异步 阻塞与非阻塞
- 同步、异步、阻塞、非阻塞
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- 同步,异步,阻塞,非阻塞
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- 网络编程之同步,阻塞,异步,非阻塞-网络编程【转】
- socket编程的同步、异步与阻塞、非阻塞示例详解之二
- 同步、异步、阻塞、非阻塞的简单理解
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- IO中同步异步,阻塞与非阻塞 -- 原理篇
- socket阻塞、非阻塞,同步、异步、I/O模型
- 阻塞非阻塞、同步异步的区别
- I/O模型:阻塞、非阻塞 & 同步、异步
- 同步、异步、阻塞和非阻塞的概念
- IO - 同步,异步,阻塞,非阻塞
- 怎样理解同步异步与阻塞非阻塞的区别?
- Linux程序设计之套接字: 同步与异步 & 阻塞与非阻塞
- 阻塞、非阻塞与异步、同步之间的区别
- 同步、异步、阻塞和非阻塞
- socket阻塞与非阻塞,同步与异步