【并发小知识】
计算机五大组成部分
控制器
运算器
存储器
输入设备
输出设备
计算机的核心真正干活的是CPU(控制器+运算器=中央处理器)
- 程序要想计算机运行,它的代码必须要先由硬盘读到内存,之后cpu取指再执行
操作系统发展史
穿孔卡片处理系统:一个人占一个机房,输入卡片
联机批处理系统:(磁带)节省插入卡片的等待的时间,提升了CPU处理时间。
脱机批处理系统:输入机(硬盘) --> 卫星机 --> 高速磁带(内存)—> 主机,CPU运行的速度是非常快的,而数据从硬盘读取到内存速度相对来说是非常慢的。
多道技术
单核实现并发的效果
必备知识点
-
并发
看起来像同时运行的就可以称之为并发
-
并行
真正意义生的同时执行
ps:
- 并行肯定算并发
- 单核的计算机肯定不能实现并行,但是可以实现并发!!!
补充:我们直接假设单核就是一个核,干活的就是一个人。
多道技术图解
节省了多个程序运行的总耗时
-
单道(串行)
任务A: 输入过程 - 执行过程 - 输出过程 - 任务B:输入过程 - 执行过程 - 输出过程
-
多道(在执行任务A的时候控制硬盘将任务B提前读取到内存) 时间线短了,节省了时间
任务A输入过程 ----- 执行过程 ----- 输出过程
任务B输入过程 -----执行过程 ------输出过程
多道技术重点知识
空间上的复用与时间上的复用
-
空间上的复用
多个程序公用一套计算机硬件
-
时间上的复用
例子:洗衣服30s, 做饭50s, 烧水30s
切换+保存状态
""" 切换(cpu)分为两种情况1.当一个程序遇到 IO操作时候,操作系统会剥夺该程序的cpu执行权限.作用:提高了cpu的利用率,并且也不影响程序的执行效率2.当一个程序长时间占用cup的时候,操作系统也会剥夺该程序的cpu执行权限.作用:降低了程序的执行效率(原本时间+切换时间) """
进程理论
必备知识点
程序与进程的区别
"""
程序就是一堆躺在硬盘上的代码,是"死"的
进程则表达程序正在执行的过程,是"活"的
"""
进程调度
-
选来先服务调度算法
"""对长作业有利,对短作业无利""" -
短作业优先调度算法
"""对短作业有利,对长作业无利""" -
时间片轮转法+多级反馈队列
"""" 时间片:将固定的时间切分成N多份,每一份就表示一个时间片 越往下说明该任务需要的时间越长 越往下任务的执行优先级越低(当第一队里中出现了新的任务,cpu会立刻停止当前任务,去执行新添加进来的第一层队列中的任务)在Linux中可以给任务设置优先级,一次性分配好几个时间片(了解) """"进程运行的三状转换图
所有的程序要想被执行必须先经历就绪状态
两对重要概念
-
同步和异步
"""描述的是任务的提交方式""" 同步:任务提交之后,原地等待任务的返回结果,等待的过程中不做任何事(干等)程序层面上表现出来的感觉就是卡住了异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情我提交的任务结果如何获取?任务的返回结果会有一个异步回调机制自动处理 -
阻塞非阻塞
"""描述的程序的运行状态""" 阻塞:阻塞态 非阻塞:就绪态, 运行态上述概念的组合:最高效的一种组合就是异步非阻塞
开启进程的两种方式
定心丸:代码开启进程和线程方式,代码书写基本是一样的.
join方法
from multiprocessing import Process
import timedef task(name,n):print('%s is running' % name)time.sleep(n)print('%s is over' % name)if __name__ == '__main__':# 1.创建一个对象# p1 = Process(target=task, args=('jason', 1))# p2 = Process(target=task, args=('egon', 2))# p3 = Process(target=task, args=('tank', 3))# # 2.开启进程# start_time = time.time()# p1.start() # 告诉操作系统帮你创建一个进程# p2.start()# p3.start()# p1.join()# p2.join()# p3.join()# print('主',time.time() - start_time)start_time = time.time()p_list = []for i in range(1,4):p = Process(target=task, args=('%s' % i, i))p.start()p_list.append(p)for i in p_list:p.join()print('主', time.time() - start_time)"""
windows操作系统下,创建进程一定要在main内创建
因为Windows下创建进程类似于模块导入方式
会从上往下依次执行代码
linux中则是直接将代码完整的拷贝一份
"""
进程间数据相互隔离
from multiprocessing import Processmoney = 100def task():global money # 局部修改全局money = 666print('子', money)if __name__ == '__main__':p = Process(target=task)p.start()p.join()print(money)
昨日回顾
-
操作系统的发展史
"""其实主要就是围绕cpu的利用率问题""" -
多道技术
""" 单核实现并发的效果并发:看起来像是同时运行的就可以叫做并发 并行:真正意义上的同时运行空间和时间上的复用 空间上多个程序公用一套计算机硬件时间上切换+保存状态 """ # 切换分为两种 # 1.当一个程序遇到IO操作,操作系统会立刻剥夺该程序的执行权限(提高了cpu的利用率,并且不影响程序的执行效果) # 2.当一个程序长时间占用cpu,操作系统会立刻剥夺该程序的执行权限(降低了程序的运行效率,但是玩出了并发的效果) -
进程
""" 程序:就是一堆死代码 进程:程序正在执行的过程 """# 进程的调度算法 """ 先来先服务调度算法 短作业优先调度算法 时间片轮转法+多级反馈队列 """ -
进程运行的三状态图
""" 就绪态:一切程序必须要先经过就绪态,才能进入运行态 运行态:正在被cpu执行 阻塞态:程序遇到IO操作了理想:我们希望我们开发的程序一直处于就绪态和运行态之间 """ -
两对重要概念
-
同步与异步
"""任务的提交方式""" 同步任务提交之后原地等待返回结果期间不做任何事情 异步任务提交之后不原地等待返回结果执行下一行代码结果由异步回调机制做处理 -
阻塞与非阻塞
"""程序运行的状态""" 阻塞:阻塞态 非阻塞:就绪态, 运行态上面的两对概念通常组合出现,但是最常用的就是异步非阻塞
-
-
开启进程的两种方式
"""参考之前的代码""" -
join方法
"""主进程等待子进程代码运行完毕后再往下执行代码""" -
进程间数据是相互隔离的
相关文章:
【并发小知识】
计算机五大组成部分 控制器 运算器 存储器 输入设备 输出设备 计算机的核心真正干活的是CPU(控制器运算器中央处理器) 程序要想计算机运行,它的代码必须要先由硬盘读到内存,之后cpu取指再执行 操作系统发展史 穿孔卡片处理…...
python将多个音频文件与一张图片合成视频
代码中m4a可以换成mp3,图片和音频放同一目录,图片名image.jpg,多线程max_workers可以根据CPU核心数量修改。 import os import subprocess import sys import concurrent.futures import ffmpeg def get_media_duration(media_path): probe ffmp…...
JavaEE:Servlet创建和使用及生命周期介绍
目录 ▐ Servlet概述 ▐ Servlet的创建和使用 ▐ Servlet中方法介绍 ▐ Servlet的生命周期 ▐ Servlet概述 • Servlet是Server Applet的简称,意思是 用Java编写的服务器端的程序,Servlet被部署在服务器中,而服务器负责管理并调用Servle…...
【Python设计模式15】适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而无法一起工作的类能够一起工作。通过使用适配器模式,可以使得现有的类能够适应新的接口需…...
【Python设计模式05】装饰模式
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许向一个现有对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类来包裹原始类,从而在不修改原始类代码的情况下扩展对象的功能。 装饰模式的结构…...
kafka 消费模式基础架构
kafka 消费模式 &基础架构 目录概述需求: 设计思路实现思路分析1.kafka 消费模式基础架构基础架构2: 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,…...
nginx安装部署问题
记一次nginx启动报错问题处理 问题1 内网部署nginx,开始执行make,执行不了,后面装了依赖的环境 yum install gcc-c 和 yum install -y pcre pcre-devel 问题2,启动nginx报错 解决nginx: [emerg] unknown directive “stream“ in…...
揭开Java序列化的神秘面纱(上)Serializable使用详解
Java序列化(Serialization)作为一项核心技术,在Java应用程序的多个领域都有着广泛的应用。无论是通过网络进行对象传输,还是实现对象的持久化存储,序列化都扮演着关键的角色。然而,这个看似简单的概念蕴含着丰富的原理和用法细节&…...
深度学习——自己的训练集——图像分类(CNN)
图像分类 1.导入必要的库2.指定图像和标签文件夹路径3.获取文件夹内的所有图像文件名4.获取classes.txt文件中的所有标签5.初始化一个字典来存储图片名和对应的标签6.遍历每个图片名的.txt文件7.随机选择一张图片进行展示8.构建图像的完整路径9.加载图像10.检查图像是否为空 随…...
goimghdr,一个有趣的 Python 库!
更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - goimghdr。 Github地址:https://github.com/corona10/goimghdr 在图像处理和分析过程中,识别图像文件的类型是一个常见的需求。Python自带的imghdr…...
每小时电量的计算sql
计算思路,把每小时的电表最大记录取出来,然后用当前小时的最大值减去上个小时的最大值即可。 使用了MYSQL8窗口函数进行计算。 SELECT b.*,b.epimp - b.lastEmimp ecValue FROM ( SELECT a.deviceId,a.ctime,a.epimp, lag(epimp) over (ORDER BY a.dev…...
自动化您的任务——crewAI 初学者教程
今天,我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息:crewAI。 我将在这里或那里跳过一些内容,使本教程成为一个精炼的教程,概述帮助您入门的关键概念和要点 今天,我写这篇文章是为了…...
K8s集群中的Pod调度约束亲和性与反亲和性
前言 在 K8s 集群管理中,Pod 的调度约束——亲和性(Affinity)与反亲和性(Anti-Affinity)这两种机制允许管理员精细控制 Pod 在集群内的分布方式,以适应多样化的业务需求和运维策略。本篇将介绍 K8s 集群中…...
kafka之consumer参数auto.offset.reset
Kafka的auto.offset.reset 参数是用于指定消费者在启动时如何处理偏移量(offset)的。这个参数有三个主要的取值:earliest、latest和none。 earliest: 当各分区下有已提交的offset时,从提交的offset开始消费;…...
回答篇二:测试开发高频面试题目
引用之前文章:测试开发高频面试题目 本篇文章是回答篇(持续更新中) 1. 在测试开发中使用哪些自动化测试工具和框架?介绍一下你对其中一个工具或框架的经验。 a. 测试中经常是用的自动化测试工具和框架有Selenium、Pytest、Postman…...
React18 apexcharts数据可视化之甜甜圈图
03 甜甜圈图 apexcharts数据可视化之甜甜圈图。 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式: 基本甜甜圈图个性图案的甜甜圈图渐变色的甜甜圈图 面包圈 import ApexChart from react-apexcharts;export function DonutUpdate() {// 数据…...
如何通过OpenHarmony的音频模块实现录音变速功能?
简介 OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由开放原子开源基金会孵化及运营的开源项目,是面向全场景、全连接、全智能时代的智能物联网操作系统。 多媒体子系统是OpenHarmony系统中的核心子系统,为系统提供了相机、…...
探索 Rust 语言的精髓:深入 Rust 标准库
探索 Rust 语言的精髓:深入 Rust 标准库 Rust,这门现代编程语言以其内存安全、并发性和性能优势而闻名。它不仅在系统编程领域展现出强大的能力,也越来越多地被应用于WebAssembly、嵌入式系统、分布式服务等众多领域。Rust 的成功࿰…...
Log360:护航安全,远离暗网风险
暗网有时候就像是一个神秘的地下世界,是互联网的隐蔽角落,没有任何规则。这是一个被盗数据交易、网络犯罪分子策划下一步攻击的地方。但仅仅因为它黑暗,不意味着你要对潜在的威胁视而不见。 暗网 这就是ManageEngine Log360的用武之地&…...
react使用antd警告:Warning: findDOMNode is deprecated in StrictMode.
警告信息: Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of DOMWrap which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: htt…...
intv_ai_mk11GPU利用率提升:Llama中型模型批处理与并发请求调优方案
intv_ai_mk11 GPU利用率提升:Llama中型模型批处理与并发请求调优方案 1. 背景与挑战 intv_ai_mk11 是基于 Llama 架构的中等规模文本生成模型,在实际部署中我们发现单请求处理时GPU利用率往往不足30%。这种低效的资源使用导致两个主要问题:…...
从信息收集到密码爆破:如何用DictGenerate定制你的专属社工字典?
从信息收集到密码爆破:如何用DictGenerate定制你的专属社工字典? 在授权渗透测试和安全评估中,社会工程学攻击往往是最难防御的一环。攻击者通过收集目标的个人信息,精心构造符合目标习惯的密码字典,能够显著提高暴力…...
WinDiskWriter:突破限制的macOS Windows启动盘制作工具
WinDiskWriter:突破限制的macOS Windows启动盘制作工具 【免费下载链接】windiskwriter 🖥 Windows Bootable USB creator for macOS. 🛠 Patches Windows 11 to bypass TPM and Secure Boot requirements. 👾 UEFI & Legacy …...
Qwen All-in-One场景解析:如何用轻量模型赋能边缘计算应用
Qwen All-in-One场景解析:如何用轻量模型赋能边缘计算应用 1. 引言:当边缘计算遇上大模型 想象一下,在一个智能工厂的质检工位上,摄像头捕捉到产品表面的微小瑕疵。传统的做法是:将图像上传到云端服务器,…...
人工智能应用- 人工智能风险与伦理:01.数据安全
图: 人脸识别的滥用可能带来隐私风险,为不法分子提供可乘之机。特别是无处不在的摄像头,使我们的人脸生物信息可能暴露在风险中,被非法采集。人工智能的广泛应用离不开对数据的采集与分析,但也因此带来了数据安全方面的担忧。人工…...
终极指南:Lottie动画版本管理的5个专业技巧
终极指南:Lottie动画版本管理的5个专业技巧 【免费下载链接】lottie Lottie documentation for http://airbnb.io/lottie. 项目地址: https://gitcode.com/gh_mirrors/lo/lottie Lottie是Airbnb开发的开源动画库,它能让开发者轻松地在移动应用和网…...
番茄小说离线阅读解决方案:打造你的个人数字图书馆
番茄小说离线阅读解决方案:打造你的个人数字图书馆 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 在数字阅读时代,你是否曾遇到过这样的困扰:网络信号不…...
NVMe-CLI:Linux系统下NVMe固态硬盘管理的瑞士军刀
NVMe-CLI:Linux系统下NVMe固态硬盘管理的瑞士军刀 【免费下载链接】nvme-cli NVMe management command line interface. 项目地址: https://gitcode.com/gh_mirrors/nv/nvme-cli 你是否曾经为Linux系统中的NVMe固态硬盘管理而烦恼?想要查看设备健…...
换掉 Notepad++,事实证明它更牛逼!
提到文本编辑工具,大家肯定第一时间想到的是 Notepad 。Notepad 是一种流行的源代码编辑器,也是 Windows 用户的可靠记事本替代品。它是一个功能强大的实用程序,可在不占用大量存储空间的情况下提供最佳性能。不幸的是,它不适用于…...
Awoo Installer深度解析:破解Switch游戏安装困境的全能工具
Awoo Installer深度解析:破解Switch游戏安装困境的全能工具 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 在Nintendo Switch破解社区…...
