中信建设有限责任公司官方网站,查看网站建设时间,wordpress首页不显示指定分类文章,门户网站建设方案ppt嗨喽~大家好呀#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取
一、状态介绍
在了解其他概念之前#xff0c;我们首先要了解进程的几个状态。
在程序运行的过程中#xff0c;由于被操作系统的调度算法控制#xff0c;程序…嗨喽~大家好呀这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取
一、状态介绍
在了解其他概念之前我们首先要了解进程的几个状态。
在程序运行的过程中由于被操作系统的调度算法控制程序会进入几个状态就绪运行和阻塞。 就绪(Ready)状态当进程已分配到除CPU以外的所有必要的资源只要获得处理机便可立即执行这时的进程状态称为就绪状态。 执行/运行Running状态当进程已获得处理机其程序正在处理机上执行此时的进程状态称为执行状态。 阻塞(Blocked)状态正在执行的进程由于等待某个事件发生而无法执行时便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种例如等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
二、同步和异步
所谓异步是不需要等待被依赖的任务完成只是通知被依赖的任务要完成什么工作
依赖的任务也立即执行只要自己完成了整个任务就算完成了。
至于被依赖的任务最终是否真正完成依赖它的任务无法确定所以它是不可靠的任务序列。
例子
第一种 选择排队等候
第二种 选择取一个小纸条上面有我的号码等到排到我这一号时由柜台的人通知我轮到我去办理业务了
第一种前者(排队等候)就是同步等待消息通知也就是我要一直在等待银行办理业务情况
第二种后者(等待别人通知)就是异步等待消息通知。 在异步消息处理中等待消息通知者(在这个例子中就是等待办理业务的人)往往注册一个回调机制在所等待的事件被触发时由触发机制(在这里是柜台的人)通过某种机制(在这里是写在小纸条上的号码喊号)找到等待该事件的人。
三、阻塞和非阻塞
例子
继续上面的那个例子不论是排队还是使用号码等待通知如果在这个等待的过程中
等待者除了等待消息通知之外不能做其它的事情那么该机制就是阻塞的
表现在程序中,也就是该程序一直阻塞在该函数调用处不能继续往下执行。
相反有的人喜欢在银行办理这些业务的时候一边打打电话发发短信一边等待
这样的状态就是非阻塞的因为他(等待者)没有阻塞在这个消息通知上而是一边做自己的事情一边等待。
注意
同步非阻塞形式实际上是效率低下的想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有。
如果把打电话和观察排队的位置看成是程序的两个操作的话这个程序需要在这两种不同的行为之间来回的切换效率可想而知是低下的
而异步非阻塞形式却没有这样的问题因为打电话是你(等待者)的事情而通知你则是柜台(消息触发机制)的事情程序没有在两种不同的操作中来回切换。
四、同步/异步和阻塞/非阻塞
1.异步阻塞形式
如果在银行等待办理业务的人采用的是异步的方式去等待消息被触发通知
也就是领了一张小纸条假如在这段时间里他不能离开银行做其它的事情
那么很显然这个人被阻塞在了这个等待的操作上面。
异步操作是可以被阻塞住的只不过它不是在处理消息时阻塞而是在等待消息通知时被阻塞。
2.同步非阻塞形式
想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有
如果把打电话和观察排队的位置看成是程序的两个操作的话
这个程序需要在这两种不同的行为之间来回的切换效率可想而知是低下的。
3.异步非阻塞形式
因为打电话是你(等待者)的事情而通知你则是柜台(消息触发机制)的事情程序没有在两种不同的操作中来回切换。
比如说这个人突然发觉自己烟瘾犯了需要出去抽根烟于是他告诉大堂经理说
排到我这个号码的时候麻烦到外面通知我一下那么他就没有被阻塞在这个等待的操作上面
自然这个就是异步非阻塞的方式了。
总结
很多人会把同步和阻塞混淆是因为很多时候同步操作会以阻塞的形式表现出来
同样的很多人也会把异步和非阻塞混淆因为异步操作一般都不会在真正的IO操作处被阻塞。
尾语
最后感谢你观看我的文章呐~本次航班到这里就结束啦
希望本篇文章有对你带来帮助 有学习到一点知识~
躲起来的星星也在努力发光你也要努力加油让我们一起努力叭。 最后宣传一下呀~更多源码、资料、素材、解答、交流皆点击下方名片获取呀