并发编程基础概念

相关概念

并行

并行是指同一个时刻,多个任务同时进行。只有在多核CPU下才会发生。

并发

并发是指单个CPU在不同任务之间来换切换工作,但是同一时刻只有一个任务在工作。由于CPU的切换速度很快,给人的感受是多个任务在一起运行。

串行

串行是指单个CPU根据任务队列顺序执行任务,只有前面的任务完成后才会执行后面的任务。

进程

进程是程序在计算机中运行的具体实现。进程一般由程序段数据集控制块组成。

  • 程序段是指任务的指令集
  • 数据集是指任务执行过程中需要的变量,函数,类等数据
  • 控制块是记录CPU处理任务时用到的控制模块

在操作系统中进程使用pid(process identification)表示。pid由进程创建时,操作系统分配得到。并且在进程运行过程中pid不会发生改变。

 import os​# 获取当前进程的pidprint(os.getpid())# 获取当前进程的父进程pidprint(os.getppid())

线程

进程内的一个任务执行的独立单元,是任务调度和系统执行的最小单位。

协程

用户态的轻量级线程,协程的调度完全由用户控制,主要为单线程下模拟多线程。

一个程序可以由一到多个进程,一个进程可以有一到多个线程,一个线程下可以有一到多个协程。

进程状态

在操作系统创建进程,到销毁进程的过程中,进程一般存在三个状态就绪运行阻塞

  • 就绪:进程获取了除CPU外的及其资源,一旦获取CPU资源就可以工作的状态
  • 运行:CPU在工作,且进程工作的状态
  • 阻塞:CPU没有工作,且进程工作的状态,往往是在执行IO操作

同步/异步

同步和异步是多任务处理过程中的不同方式或手段。

同步

同步就是多任务发生时,系统按照任务顺序依次执行,只有前面的任务结束后,才会执行后面的任务。

异步

异步就是多任务发生时,系统会以并行或并发的方式处理多任务,让多任务之间不必相关等待。

案例说明

同步:某人去商场购买洗衣机然后回家做饭。她必须要等商场配好洗衣机后,然后带着洗衣机,回家做饭。

异步:某人去商场相中洗衣机后,网上下单,然后回家做饭。此时她不需要等待商场配好洗衣机后才回家,网上下单后就可以直接回家了。

阻塞/非阻塞

阻塞和非阻塞是进程处于阻塞状态时,CPU的工作方式。

阻塞

当任务处于阻塞时,CPU处于等待状态,不能处理其他任务。

非阻塞

当任务处于阻塞时,CPU不必等待,能够处理其他任务。

同步阻塞

当系统以同步方式处理多任务时,如果任务A发生了阻塞状态,则任务A后面的所有任务都必须要等待任务A结束阻塞状态,且完成后才能执行。

 import time​​def taska():print("task a started")time.sleep(5)print("task a ended")​​def taskb():print("task b started")time.sleep(5)print("task b ended")​​if __name__ == "__main__":queue = [taska, taskb]for task in queue:task()

异步阻塞

当系统以异步方式处理多任务时,如果任务A发生阻塞状态,系统需要等待,而不会切换至其他任务进行处理。

 """@Time: 2024/6/28 20:18@Author: 'Ethan'@Email: ethanzhou4406@outlook.com@File: 1. 同步阻塞.py@Project: python@Feature:"""import timeimport multiprocessing​​def taska():print("task a started")time.sleep(5)print("task a ended")​​def taskb():print("task b started")time.sleep(5)print("task b ended")​def taskc():print("task c started")time.sleep(5)print("task c ended")​if __name__ == "__main__":processa = multiprocessing.Process(target=taska)processb = multiprocessing.Process(target=taskb)processc = multiprocessing.Process(target=taskc)queue = [processa, processb, processc]for process in queue:process.start()process.join() # 阻塞​

同步非阻塞

当系统以同步方式处理多任务时,如果前面的任务A出现阻塞状态,则后面的任务B不必等待,直接运行。

异步非阻塞

当系统以异步方式处理多任务时,如果前面的任务A出现阻塞状态,则不需等待切换至任务B运行。

 """@Time: 2024/6/28 20:18@Author: 'Ethan'@Email: ethanzhou4406@outlook.com@File: 1. 同步阻塞.py@Project: python@Feature:"""import timeimport multiprocessing​​def taska():print("task a started")time.sleep(5)print("task a ended")​​def taskb():print("task b started")time.sleep(5)print("task b ended")​def taskc():print("task c started")time.sleep(5)print("task c ended")​if __name__ == "__main__":processa = multiprocessing.Process(target=taska)processb = multiprocessing.Process(target=taskb)processc = multiprocessing.Process(target=taskc)queue = [processa, processb, processc]for process in queue:process.start()

发布于 2024-06-28 21:30・IP 属地江苏

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

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

相关文章

Ansys Zemax|在设计抬头显示器(HUD)时需要使用哪些工具?

附件下载 联系工作人员获取附件 汽车抬头显示器或汽车平视显示器,也被称为HUD,是在汽车中显示数据的透明显示器,不需要用户低头就能看到他们需要的重要资讯。这个名字的由来是由于该技术能够让飞行员在头部“向上”并向前看的情况下查看信息…

RocketMQ快速入门:linux安装rocketmq并配置开机自启(十一)

目录 0. 引言1. 下载安装包1.1 高版本直接下载安装包1.2 下载源码包进行编译 2. namesrv和broker安装2.1 安装2.2 放开服务器端口2.3 测试 3. 配置开机自启3.1 配置namesrv开机自启3.2 配置broker开机自启 0. 引言 之前我们针对本机电脑安装rocketmq进行了讲解,同时…

Java--回顾方法的定义

1.修饰符 public 公共的 修饰String类型 2.返回类型 返回的值得类型 返回值为String(字符串)类型 3.break continue return的区别 break,结束整个循环 continue,结束本次循环 return,结束整…

java用this语句调用构造方法

示例代码如下: class Student7{private String name;private int age;public Student7(){System.out.println("调用了无参构造方法");}public Student7(String name,int age){this();this.namename;this.ageage;}public String read(){return"我是:…

远程过程调用RPC实现原理

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

运算放大器输出相位反转和输入过压保护

运算放大器输出电压相位反转 本教程讨论两个与运算放大器相关的话题:输出相位反转和输入过压保护。 超过输入共模电压(CM)范围时,某些运算放大器会发生输出电压相位反转问题。其原因通常是运算放大器的一个内部级不再具有足够的偏置电压而关闭&#xff…

昇思25天学习打卡营第4天|常见的数据变换 Transforms类型

导入数据集相关库和模块 首先导入了一些必要的库和模块,包括 numpy(np 是其常用的别名)、PIL 库中的 Image 模块,以及自定义的 download 模块,还有 mindspore.dataset 中的 transforms、vision、text 模块。然后使用 m…

C# 关于通讯观察线程(2) -- 断线重连

通讯观察线程是个有意思,又是非常实用的功能。 断线重连具体怎么实现呢,很多人都实现过,那么TouchSocket等几个通讯组件中也包含有,都是可以拿来就用。只是,对于高级用户和特别细节操作要求的,是会自定义特…

数字信号处理实验三(IIR数字滤波器设计)

IIR数字滤波器设计(2学时) 要求: 产生一复合信号序列,该序列包含幅度相同的28Hz、50Hz、100Hz、150Hz的单音(单频)信号;其中,50Hz及其谐波为工频干扰(注:采样…

Chrome Extension如何让work flow在页面刷新、跳转继续执行任务

从Electron到Chrome Extension:流程自动化的跨平台探索 在之前的项目中,我使用Electron成功实现了一个流程自动化应用,它极大地提高了工作效率。然而,当面对Chrome扩展程序(Extension)的需求时,我意识到需要一种新的策略来应对浏览器环境下的限制。特别是Chrome Extens…

SII9134CTU HDMI发射芯片

SII9134 HDMI深彩色发射机是第三代高清晰度多媒体接口(HDMI)发射机,支持HDMI 1.3规范。 这款完全符合hdmi标准的设备提供了一种简单、低成本的方法来发送受保护的数字音频和视频,为最终用户提供真正的全数字体验。AV接收器,以及蓝光和HD DVD…

2024年6月27日,欧盟REACH法规新增第31批1项SVHC高关注物质

ECHA公布第31批1项SVHC,物质已增至241项 2024年6月27日,ECHA公布第31批1项SVHC,总数达241项。新增物质未包括磷酸三苯酯,仍在评议中。REACH法规要求SVHC含量超0.1%需告知下游,出口超1吨须通报ECHA。SCIP通报要求SVHC含…

MySQL84 -- ERROR 1524 (HY000): Plugin ‘msql_native_password‘ is not loaded.

【问题描述】 MySQL 8.4版本,配置用户使用mysql_native_password认证插件验证用户身份,报错: 【解决方法】(Windows, MySQL 8.4) 1、修改MySQL配置文件my.ini,在[mysqld]段添加mysql_native_passwordON。 2、管理员…

uni-app 自定义支付密码键盘

1.新建最贱 payKeyboard .vue <template><view class"page-total" v-show"isShow"><view class"key-list"><view class"list" v-for"(item,index) in keyList" :class"{special:item.keyCode190…

LeetCode 53.最大子数组和(dp)

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff1a;…

《雁门太守行》

作者 李贺 【唐代】 全文&#xff1a; 黑云压城城欲摧&#xff0c;甲光向日金鳞开。 角声满天秋色里&#xff0c;塞上燕脂凝夜紫。 半卷红旗临易水&#xff0c;霜重鼓寒声不起。 报君黄金台上意&#xff0c;提携玉龙为君死。 提示&#xff1a; (塞上 一作&#xff1a;塞土) …

描述ifstream、ofstream和fstream类的用途

ifstream、ofstream和fstream是C标准库<fstream>中提供的三个重要的文件流类&#xff0c;它们分别用于文件的读取、写入和读写操作。以下是这三个类的详细用途描述&#xff1a; ifstream类&#xff08;输入文件流类&#xff09;&#xff1a; 用途&#xff1a;ifstream类…

JavaScript:实现内容显示隐藏(展开收起)功能

一、场景 点击按钮将部分内容隐藏&#xff08;收起&#xff09;&#xff0c;再点击按钮时将内容显示&#xff08;展开&#xff09;出来。 二、技术摘要 js实现实现内容显示隐藏js动态给ul标签添加li标签js遍历数组 三、效果图 四、代码 js_block_none.js代码 var group1 doc…

网工内推 | 网络工程师,IE认证优先,最高18k*14薪,周末双休

01 上海吾索信息科技有限公司 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;岗位职责&#xff1a; 1&#xff09;具备网络系统运维服务经验以及数据库实施经验&#xff0c;具备网络系统认证相关资质或证书&#xff1b; 2&#xff09;掌握常用各设备的运维巡检…

GESP 四级急救包(3):押题急救

常见算法攻克 一、素数1. 素数判断2. 素数筛法 二、数据转换1. 字符串转换2. 进制转换2.1 将 x x x 进制转换为 10 10 10 进制2.2 将 10 10 10 进制转换为 x x x 进制 三、字符串1. 字符串替换2. 其他题目 一、素数 1. 素数判断 bool isPrime(int n) {if (n < 2) retu…