Python进程,线程

目录

一、多任务

1.1定义

1.2具体体现

1.3并发和并行

1.3.1并发操作

1.3.2并行操作

1.3.3对比

二、进程

2.1概念

2.2特点

2.3进程状态

2.4多进程

2.5多进程实现

2.6进程锁

三、线程

3.1概念

3.2特点

3.3适用场景

3.4多线程实现

四、对比

4.1关系对⽐

4.2区别对⽐

4.3优缺点


一、多任务

1.1定义

多任务是指在同⼀时间内执行多个任务

1.2具体体现

多核处理器:真正并行执行多个任务,每个核心处理不同进程

CPU时间片轮转:操作系统快速切换执行不同程序,给用户同时运行多个程序的感觉

文档编辑器实时保存文件同时进行拼写检查

浏览器同时加载多个网页标签

1.3并发和并行

多任务的两种表现形式:并发和并行

1.3.1并发操作

指多个任务在同一时间段内交替执行,通过任务切换实现同时处理多个任务的效果。在单核CPU上也可以实现并发。

1.3.2并行操作

指多个任务真正同时执行,需要多个处理单元(如多核CPU)来实现,每个任务在不同的处理单元上同时运行。

1.3.3对比

二、进程

2.1概念

是计算机中正在运行的程序的一个实例,是操作系统进行资源分配和调度的基本单位。

2.2特点


独立性:每个进程都有独立的内存空间和系统资源
动态性:进程是程序的一次执行过程,具有生命周期
并发性:多个进程可以同时存在于系统中并并发执行
异步性:进程按各自独立的、不可预知的速度向前推进

2.3进程状态

2.4多进程

def fun_a():print('进行程序a')def fun_b():print('进行程序b')fun_a()
fun_b()

当我们需要执行上面代码中的两个任务进程的时候,同时进行可以大大增加效率

现在的进程执行顺序:

采用多进程:

2.5多进程实现

1.导入进程multiprocessing包

2.通过进程类创建进程对象:进程对象 = multiprocessing.Process()
3.启动进程执⾏任务:进程对象.start()

代码实现:

# 导⼊多进程模块,⽤于创建和管理进程
import multiprocessing
# 导⼊时间模块,⽤于实现计时功能
import time
def music():for i in range(3):print('听⾳乐...')time.sleep(0.2)
def coding():for i in range(3):print('敲代码...')time.sleep(0.2)
if __name__ == '__main__':# 创建⼀个进程,⽤于执⾏名为music的函数music_process = multiprocessing.Process(target=music)# 创建另⼀个进程,⽤于执⾏名为coding的函数coding_process = multiprocessing.Process(target=coding)# 启动music进程,使其开始执⾏music_process.start()# 启动coding进程,使其开始执⾏coding_process.start()

由于是交替执行,无序,所以控制台输出的时候可能并不像我们想要的结果那样一一交替运行,比如:

2.6进程锁

我们可以通过进程锁,来管理运行的权力,规定将运行的职权给一个功能后,进行堵塞,必须等待其运行完才能将运行的权利交给下一个功能

# 导⼊多进程模块,⽤于创建和管理进程
from multiprocessing import Process, Lock
# 导⼊时间模块,⽤于实现计时功能,导入进程锁,将程序运行进行阻塞
lock = Lock()
import time
def music():for i in range(3):with lock:print('正在播放音乐...')time.sleep(0.2)
def coding():for i in range(3):with lock:print('敲代码...')time.sleep(0.2)
if __name__ == '__main__':# 创建⼀个进程,⽤于执⾏名为music的函数music_process = Process(target=music)# 创建另⼀个进程,⽤于执⾏名为coding的函数coding_process = Process(target=coding)# 启动music进程,使其开始执⾏music_process.start()# 启动coding进程,使其开始执⾏coding_process.start()

此时多次运行测试发现,运行结果一致都是一一交替运行:

三、线程

3.1概念

线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程共享进程的内存空间和系统资源。 

3.2特点

1. 轻量级
--线程是比进程更小的执行单位
--创建和切换开销比进程小得多


2. 共享资源
--同一进程内的线程共享内存空间、文件句柄等资源
--线程间通信比进程间通信更高效


3. 独立执行
--每个线程有独立的执行路径
--拥有独立的栈空间和寄存器状态


4. 并发执行
--多个线程可以并发执行
--提高程序执行效率和响应性


5. 同步需求
--多线程访问共享资源时需要同步机制
--需要考虑线程安全问题
 

3.3适用场景

1. I/O密集型任务

文件读写、网络请求等I/O操作

当一个线程等待I/O时,其他线程可以继续执行

2. 并行计算

CPU多核环境下可实现真正的并行处理

大量独立计算任务的并行执行

3. 用户界面应用

提高UI响应性,避免界面卡顿

后台任务与UI线程分离

4. 服务器应用

处理多个客户端并发请求

Web服务器、数据库服务器等

5. 实时系统

需要同时处理多个实时任务的场景

定时任务、监控系统等

3.4多线程实现

# 导⼊time模块和threading模块
import time
import threading
# 定义⼀个播放⾳乐的函数
def music():# 循环三次,每次打印听⾳乐的状态并暂停0.2秒for i in range(3):print('听⾳乐...')time.sleep(0.2)
# 定义⼀个编码的函数
def coding():# 循环三次,每次打印敲代码的状态并暂停0.2秒for i in range(3):print('敲代码...')time.sleep(0.2)
# 程序⼊⼝
if __name__ == '__main__':# 创建⼀个线程,⽤于播放⾳乐。通过threading.Thread类创建线程,music函数作为线程# 要执⾏的⽬标。music_thread = threading.Thread(target=music)# 创建⼀个线程,⽤于编码⼯作。同样使⽤threading.Thread类创建,coding函数作为线# 程序要执⾏的⽬标。coding_thread = threading.Thread(target=coding)# 启动⾳乐线程和编码线程music_thread.start()coding_thread.start()# 等待⾳乐线程完成其任务music_thread.join()# 等待编码线程完成其任务coding_thread.join()print('程序结束')

四、对比

4.1关系对⽐

① 线程是依附在进程⾥⾯的,没有进程就没有线程。

② ⼀个进程默认提供⼀条线程,进程可以创建多个线程

4.2区别对⽐

① 进程之间不共享全局变量

② 线程之间共享全局变量

③ 创建进程的资源开销要⽐创建线程的资源开销要⼤

④ 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位

4.3优缺点

① 进程优缺点:

优点:可以⽤多核

缺点:资源开销⼤

② 线程优缺点

优点:资源开销⼩

缺点:不能使⽤多核

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

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

相关文章

【Element Plus 表单组件样式统一 CSS 文字特效实现指南】

Element Plus 表单组件样式统一 & CSS 文字特效实现指南 前言 在使用 Element Plus 组件库开发表单页面时,我们遇到了一个看似简单却很有趣的问题:el-input、el-select 和 el-textarea 在禁用状态下的文字颜色不一致。通过深入研究,我们…

网络通信与协议栈 -- OSI,TCP/IP模型,协议族,UDP编程

网络通信的核心是实现不同主机上进程间的数据交换,其技术体系围绕 “协议分层模型” 展开,向下依赖硬件介质传输电 / 光信号,向上支撑各类网络应用(如网页浏览、文件传输)。本文结合 OSI 理论框架与 TCP/IP 工业标准&a…

HarmonyOS 新一代声明式 UI 弹窗机制:从 AlertDialog 到 CustomDialogController 的深度解析与实践

好的,请看这篇关于 HarmonyOS 新一代声明式 UI 弹窗机制的技术文章。 HarmonyOS 新一代声明式 UI 弹窗机制:从 AlertDialog 到 CustomDialogController 的深度解析与实践 引言 在 HarmonyOS 应用开发中,弹窗(Dialog)是…

混合推理模型(快思考、慢思考模型)

目录基础transformer架构、transformers库预训练模型的微调(Fine-tuning)预训练微调的大模型应用模式base 模型、instruct 模型区别Hugging Face 上如何查看base模型、instruct模型混合推理模型大模型里的快思考 vs 慢思考qwen3模型含特殊 ChatML / 模型…

prometheus+grafana搭建

部署 prometheus 安装 # 1,下载 wget https://github.com/prometheus/prometheus/releases/download/v2.45.1/prometheus-3.5.0.linux-amd64.tar.gz# 2,部署 tar -zxvf prometheus-3.5.0.linux-amd64.tar.gz -C /opt/ cd /opt/ mv ./prometheus-3.5.0.linux-amd64 …

MR30分布式I/O在面机装备中的应用

随着食品加工行业向自动化、智能化转型,面机装备对控制系统的响应速度、布线灵活性及稳定性提出了更高要求。本案例以某大型食品机械制造企业的全自动面条生产线升级项目为背景,引入 MR30 分布式 IO 模块替代传统集中式 IO 方案。通过将 MR30 分布式 IO …

Matlab使用小技巧合集(系列四):Table类型高效用法与数据处理实战

Matlab使用小技巧合集(系列四):Table类型高效用法与数据处理实战 在科研数据处理和论文写作过程中,结构化数据的管理极为重要。Matlab的table类型为研究生和科研人员提供了灵活、高效的数据存储与处理方式,尤其适合实验结果整理、分组统计、数据预处理等场景。本文将系统介…

STM32的时钟系统与时钟树的配置

STM32的时钟系统是其微控制器(MCU)的核心组成部分,负责为CPU、外设和存储器等模块提供精确的时序信号。其设计灵活且复杂,通过多级时钟树(Clock Tree)实现时钟源的选择、分频和分配。以下是详细介绍&#x…

NV 工具metrics分析(ncu, nsys/torch profiler)

以下分析都以A100硬件架构为例; Theoretical Max Active Warps per SM: 64 Register number: 512 (规定每个thread不能超过256) Theoretical Active Warps per SM [warp]:512//registers_per_thread*4, which defines theoretical active warp occupancy Waves P…

[CISCN2019 总决赛 Day2 Web1]Easyweb

登录界面可以看到随机切换的图片。从页面源码中可以看到<div class"avtar"><img src"image.php?id3" width"200" height"200"/></div>&#xff0c;图片文件的请求地址&#xff0c;并且有传参id。web应用中像这种动…

第 3 讲:KAFKA生产者(Producer)详解

这是一篇既照顾入门也能给高级工程师提供落地经验的实战笔记。0. TL;DR&#xff08;先上结论&#xff09; 想稳&#xff1a;acksall 合理 retries&#xff1b;需要“分区内不重不丢”→ 再加 enable.idempotencetrue 且 max.in.flight<5。想快&#xff1a;适度增大 batch.s…

微信小程序截屏与录屏功能详解

微信小程序提供了丰富的API支持截屏和录屏功能&#xff0c;适用于多种场景&#xff0c;如教育类应用的课程录制、游戏类应用的精彩瞬间分享、电商类应用的商品展示等。以下将详细介绍实现方法和应用案例。 截屏功能实现 截屏功能通过调用wx.canvasToTempFilePath或wx.captureSc…

React 中的 HOC 和 Hooks

写在前面 在函数式组件主导的 React 项目中&#xff0c;高阶组件&#xff08;HOC&#xff09;并非首选推荐&#xff0c;更建议优先使用 Hooks来实现复用逻辑。核心原因是 HOC 存在固有的设计缺陷&#xff0c;而 Hooks 能更优雅、简洁地解决相同问题&#xff0c;同时避免 HOC 的…

【 苍穹外卖 | Day2】

1. 相关视频 Day2的全部视频集数 2. 学习记录 2.1 对象属性拷贝 当DTO与实体类或者VO对象之间的一个装换的时候&#xff0c;如果通过new创建对象&#xff0c;然后调用set方法进行属性赋值&#xff0c;不够方便&#xff0c;代码不够简洁。当属性过多时候&#xff0c;代码就会…

焊接自动化测试平台图像处理分析-模型训练推理

1、使用技术栈&#xff1a;jdk17/springboot/python/opencv/yolov8 2、JAVA环境搭建 JDK17下载安装&#xff1a;wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 解压软件 tar -xf jdk-17.0.16_linux-x64_bin.tar.gz 配置全局变量 vim /etc/p…

【python实用小脚本-205】[HR揭秘]手工党逐行查Bug的终结者|Python版代码质量“CT机”加速器(建议收藏)

1. 场景故事 “作为HR&#xff0c;我曾用2小时逐行审阅50份Python简历项目&#xff0c;直到发现候选人的代码复杂度超标导致线上事故…” → 转折点&#xff1a;用麦凯布&#xff08;McCabe&#xff09;圈复杂度检测脚本&#xff0c;30秒扫描全仓库&#xff0c;现可100%拦截“高…

LeetCode - 1089. 复写零

题目 1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 思路 这道题我首先想到的是从前往后双指针&#xff0c;但是这样做会造成数据的覆盖&#xff0c;比如说下面的这个情况 所以解决的方法就是从后往前去复写&#xff0c;但是从后往前的话就要知道最后一个有效元素是…

c#中public类比博图

简单来说&#xff0c;**public 定义了“接口”或“引脚”**&#xff0c;就像你的FB块上的 Input, Output, InOut 管脚一样。它决定了外部的其他代码&#xff08;如另一个FB或OB1&#xff09;可以看到和操作这个块里的什么东西。让我用你最熟悉的博图概念来详细类比一下。---###…

K8s基于节点软亲和的高 CPU Pod 扩容与优先调度方案

场景与目标 集群节点&#xff1a;master&#xff08;4 核&#xff09;、node1&#xff08;16 核&#xff09;、node2&#xff08;16 核&#xff09;。目标&#xff1a;将一个高 CPU 消耗的工作负载横向扩展到 4 个实例&#xff0c;并通过**节点亲和性&#xff08;软亲和&#…

MySQL InnoDB 的锁机制

引言 锁是数据库管理并发访问的另一种核心机制&#xff0c;与 MVCC 相辅相成。本文将系统梳理 MySQL InnoDB 中锁的粒度、类型和工作原理&#xff0c;并深入探讨它如何与事务隔离级别配合&#xff0c;共同保障数据的一致性和完整性。 一、 锁的粒度&#xff1a;由粗到细 InnoD…