Python学习:同步异步阻塞与非阻塞

news2024/11/24 5:05:24

嗨喽,大家好呀~这里是爱看美女的茜茜呐

一、状态介绍

在了解其他概念之前,我们首先要了解进程的几个状态。

在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞

  1. 就绪(Ready)状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。

  2. 执行/运行(Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。

  3. 阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

二、同步和异步

所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。

至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。

例子

第一种 :选择排队等候;

第二种 :选择取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务了;

第一种:前者(排队等候)就是同步等待消息通知,也就是我要一直在等待银行办理业务情况;

第二种:后者(等待别人通知)就是异步等待消息通知。在异步消息处理中,等待消息通知者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机制(在这里是柜台的人)通过某种机制(在这里是写在小纸条上的号码,喊号)找到等待该事件的人。

三、阻塞和非阻塞

例子

继续上面的那个例子,不论是排队还是使用号码等待通知,如果在这个等待的过程中,等待者除了等待消息通知之外不能做其它的事情,那么该机制就是阻塞的,表现在程序中,也就是该程序一直阻塞在该函数调用处不能继续往下执行。

相反,有的人喜欢在银行办理这些业务的时候一边打打电话发发短信一边等待,这样的状态就是非阻塞的,因为他(等待者)没有阻塞在这个消息通知上,而是一边做自己的事情一边等待。

注意:

同步非阻塞形式实际上是效率低下的,想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有。

如果把打电话和观察排队的位置看成是程序的两个操作的话,这个程序需要在这两种不同的行为之间来回的切换,效率可想而知是低下的;

而异步非阻塞形式却没有这样的问题,因为打电话是你(等待者)的事情,而通知你则是柜台(消息触发机制)的事情,程序没有在两种不同的操作中来回切换。

四、同步/异步和阻塞/非阻塞

1.异步阻塞形式

如果在银行等待办理业务的人采用的是异步的方式去等待消息被触发(通知),也就是领了一张小纸条,假如在这段时间里他不能离开银行做其它的事情,那么很显然,这个人被阻塞在了这个等待的操作上面。

异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息通知时被阻塞。

2.同步非阻塞形式

想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有,如果把打电话和观察排队的位置看成是程序的两个操作的话,这个程序需要在这两种不同的行为之间来回的切换,效率可想而知是低下的。

3.异步非阻塞形式

因为打电话是你(等待者)的事情,而通知你则是柜台(消息触发机制)的事情,程序没有在两种不同的操作中来回切换。

比如说,这个人突然发觉自己烟瘾犯了,需要出去抽根烟,于是他告诉大堂经理说,排到我这个号码的时候麻烦到外面通知我一下,那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式了。

五、总结

很多人会把同步和阻塞混淆,是因为很多时候同步操作会以阻塞的形式表现出来,同样的,很多人也会把异步和非阻塞混淆,因为异步操作一般都不会在真正的IO操作处被阻塞。

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1207162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python logging模块打印日志

logging打印日志,文件名为log_config.py import logging import sysdef setup_logger(log_file, error_log_file):# 创建一个日志记录器logger logging.getLogger(__name__)logger.setLevel(logging.DEBUG) # 设置全局日志级别为 DEBUG# 创建一个文件处理器&…

赛宁网安获评“铸网-2023”江西省实网应急演练优秀支撑单位

近日,南京赛宁信息技术有限公司(赛宁网安)获得了江西省工业和信息化厅颁发的“优秀支撑单位”荣誉。 该荣誉表彰是对赛宁网安在“铸网-2023”江西省工业领域网络安全实网应急演练中提供全程技术支撑能力的认可。 本次实网应急演练聚焦工业企…

VISA机制

需要用到VISA的3种机制:属性机制、锁定机制和事件机制。以写资源为例,3种机制的作用如图 (1)属性机制 属性机制用来控制资源的各种属性,这些属性分为两种:只读属性和可读可写属性。 (2&#xf…

轻量封装WebGPU渲染系统示例<30>- 绘制线段(源码)

原理说明: WebGPU提供了绘制基本线条非机制,只要render pipeline primitive对应的 topology属性指定为line-list或者line-strip即可绘制对应的线条。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxg…

【移远QuecPython】EC800M物联网开发板的音乐播放(PWM蜂鸣器播放生日快乐歌,Sound模块播放音频)

【移远QuecPython】EC800M物联网开发板的音乐播放(PWM蜂鸣器播放生日快乐歌,Sound模块播放音频) 效果: 【移远QuecPython】EC800M开发板外置功放重金属和PWM音调(BUG调试记录) 文章目录 PWM蜂鸣器播放播放…

如何定制开发软件 App?|小程序网站搭建

如何定制开发软件 App?|小程序网站搭建 随着移动互联网的快速发展,定制开发软件 App 成为了许多企业和个人的需求。无论是为了满足特定业务需求,还是为了提升用户体验,定制开发软件 App 都可以帮助我们实现目标。下面,…

如何将 .SQL 文件导入到 IDEA自带的MySQL中

首先连接数据库新建数据库右键选择该数据库选择如下:找到对应的sql文件即可

质量管理工作难做,为什么还有那么多人还继续做?

理解质量管理的挑战 在当今商业环境中,质量管理工作是一项充满挑战的使命。然而,尽管面对种种困难,却有着越来越多的人愿意踏上这条坎坷之路。为何质量管理工作如此艰难,却依旧吸引无数人投身其中呢? 内外动因交融 内…

高通发布骁龙X Elite Oryon CPU /GitHub出现一款开源项目,让用户“拥有”更大的GPU内存|魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件🔥,更新AIGC的最新动态,生成相应的魔法简报,节省阅读时间👻 🔥资讯预览 高通发布骁龙X Elite Oryon CPU,性能超越苹果和英特尔&#xff0…

如何使用Echarts

以umi为例 首先是下载两个插件(echarts和echarts-for-react) npm npm install --save echarts-for-react npm install echarts yarn yarn add echarts-for-react yarn add echarts 接下来是在tsx或jsx中引入使用 import ReactEcharts from "echa…

运输服务预约小程序的效果如何

市场中运输服务的需求非常高,比如常见的汽车出境、进出口代理、仓储服务、集装箱运输、展会运输等,由于相关从业者多,所以在运输服务总是在市场中有着一席之地。 以前的运输企业拓客转化方式大多是同地区的单子,很难多渠道拓展&a…

基于Nvidia Jetson orin nx的 YoloV7 tensorRt加速

准备环境 安装jetPack组件 Jetpack 是 Nvidia为 Jetson系列开发板开发的一款软件开发包,常用的开发工具基本都包括了,并在在安装 Jetpack的时候,会自动的将匹配版本的CUDA、cuDNN、TensorRT等。官方提供套件中默认已经安装,可以通…

基于rosbridge 与业务系统长链接网关架构设计

技术背景: 业务系统:管理机器人,机器人任务执行等等 机器人使用是ros1 ,业务系统与机器人交互使用rosbridge, rosbridge 就是websocket 链接,所以就有了如下的一些架构思想 架构图 客户端 客户端主要分为app端、pc端…

又双叒!宏电5G RedCap工业智能网关获得首个基于RedCap终端场景的华为技术认证

近日,宏电Z2 V20 5G RedCap工业智能网关率先通过华为OpenLab全球开放实验室的系列严格验证流程,完成基于华为RedCap终端场景的兼容性测试,首个获得华为Cloud Open Labs授予的HUAWEI COMPATIBLE证书及其相关认证徽标使用权。 宏电5G RedCap工业…

SAP-PP-MRP-策略组流程演示

策略组10 按库存生产,按库存生产就不考虑其他了,说明库存不足,或者说预测下一阶段销售,库存不足了,那么就需要提前安排生产。 策略组10按库存生产操作流程TCODE操作说明注意事项MM01创建物料成品MM01创建物料原材料C…

vscode + gdb +gdbserver 远程调试Pg源码

本文主要介绍如何通过window或者macos远程调试虚拟机的postges源码 安装pg13调试版本 安装调试版postgres13,此处忽略 安装vscode(window macos) 安装插件 Remote Development 插件安装插件C/C 安装gdb gdbserver(远程虚拟机) yum install gdb yum install gdb-gdbserver…

BUUCTF 来首歌吧 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 密文: 下载附件,解压得到一个.wav音频文件。 解题思路: 1、得到一个音频文件,放到Audacity看看。看到有两条音轨,放大上面的那条音轨,看到这…

isomorphic-fetch库代码示例

isomorphic-fetch库的爬虫程序。 typescript // 引入isomorphic-fetch库 import fetch from isomorphic-fetch; // 设置 const proxy ; // 定义视频URL const url ; // 使用fetch获取视频数据 fetch(url, { method: GET, headers: { Accept: application/json, …

工作常遇,Web自动化测试疑难解答,测试老鸟带你一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、自动化测试中隐…

工作汇报怎么写?建议收藏

整体思路与模块: 背景/事件 成果展示 推动落实的方法论 收获与成长 存在的不足及改进措施 下一步工作安排 支持(选) 一、背景/事件 对于区分“功能性总结”和“应付性总结”,在背景/事件方面有一个关键点 是报告是否具有…