同步异步阻塞非阻塞
Posted 风来了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同步异步阻塞非阻塞相关的知识,希望对你有一定的参考价值。
一、同步与异步
(1)所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。
要么成功都成功,失败都失败,两个任务的状态可以保持一致。
(2)异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完
成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。我们可以用打电话和发短信来很好的比喻同
步与异步操作。
二、阻塞与非阻塞
阻塞与非阻塞主要是从 CPU 的消耗上来说的
(1)阻塞就是 CPU 停下来等待一个慢的操作完成 CPU 才接着完成其它的事。
(2)非阻塞就是在这个慢的操作在执行时 CPU 去干其它别的事,等这个慢的操作完成时,CPU 再接着完成后续的操作。虽然表面上看非阻塞的
方式可以明显的提高 CPU 的利用率,但是也带了另外一种后果就是系统的线程切换增加。增加的 CPU 使用时间能不能补偿系统的切换成本需
要好好评估。
三、两种的方式的组合
四、实例
1、等待数据准备好(读到内核缓存)
2、将数据从内核读到用户空间(进程空间) 一般来说1花费的时间远远大于2。
1上阻塞2上也阻塞是同步阻塞IO
1上非阻塞2阻塞的是同步非阻塞IO
1、假如我们去饭店点餐,如果我们付了钱后站在收银台等着饭端上来我们才离开,这就成了同步阻塞了。
2、如果我们付了钱后给你一个号就可以离开,饭好了老板会叫号,你过来取。这就是Reactor模型。
3、如果我们付了钱后给我一个号就可以坐到坐位上该干啥干啥,饭好了老板会把饭端上来送给你。这就是Proactor模型了。
2、如果我们付了钱后给你一个号就可以离开,饭好了老板会叫号,你过来取。这就是Reactor模型。
3、如果我们付了钱后给我一个号就可以坐到坐位上该干啥干啥,饭好了老板会把饭端上来送给你。这就是Proactor模型了。
出处:
参考:
以上是关于同步异步阻塞非阻塞的主要内容,如果未能解决你的问题,请参考以下文章