Python:多任务,并发,并行的理解及线程、进程的对比

python多线程编程 入门教程 目录一、多任务:1.1 概念:1.2 多任务的优势:1.3 多任务的两种表现形式:(1)并发:(2)并行:二、进程:2.1 进程的概念:2.2 多进程的作用:2.3 多进程完成多任务:(1)进程的创建步骤:(2)多进程例子:2.4 进程执行带有参数的任务:(1)参数说明:(2)例子:2.5 获取进程编号:(1)作用:(2)获取进程编号的两种方式:(3)例子:2.6 进程的注意事项:(1)主进程会等待所有的子进程完成才结束:(2)设置守护主进程:2.7 多进程-案例:(1)需求分析:(2)实现步骤:(3).. 阅读详情

什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。

再打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。

并行执行多任务只能在多核CPU上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。

  • 并发:交替处理多个任务的能力。指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)
  • 并行:同时处理多个任务的能力,指的是任务数小于等于cpu核数,任务真的是一起执行的。

多线程共享全局变量:

  • 如果多个线程同时对同一个全局变量操作,会出现资源竞争问题,从而数据结果会不正确。
  • 线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。
  • 某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。

当一个线程调用锁的acquire()方法获得锁时,锁就进入“locked”状态。

每次只有一个线程可以获得锁。如果此时另一个线程试图获得这个锁,该线程就会变为“locked”状态,称为“阻塞”,直到拥有锁的线程调用锁的release()方法释放锁之后,锁进入“unlocked”状态。

线程调度程序从处于同步阻塞状态的线程中选择一个来获得锁,并使得该线程进入运行(running)状态。

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。 

 

2. 避免死锁

  • 程序设计时要尽量避免(银行家算法)
  • 添加超时时间等

进程线程的对比:

定义的不同

  • 进程是系统进行资源分配和调度的一个独立单位.

  • 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

区别

  • 一个程序至少有一个进程,一个进程至少有一个线程.
  • 线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
  • 线线程不能够独立执行,必须依存在进程中
  • 可以将进程理解为工厂中的一条流水线,而其中的线程就是这个流水线上的工人

优缺点

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。

GIL(全局解释器锁) 

通过代码可以发现 多进程可以充分使用cpu的两个内核 而多线程却不能充分使用cpu的两个内核

问题 : 通过验证我们发现多线程并不能真正的让多核cpu实现并行

原因 : cpython解释器中存在一个GIL(全局解释器锁),他的作用就是保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并行

解决方案法 :

1:更换解释器 比如使用jpython(java实现的python解释器)

2:使用多进程完成多任务的处理

 

结论:

1. 在 处理像科学计算 这类需要持续使用cpu的任务的时候 单线程会比多线程快

2. 在 处理像IO操作等可能引起阻塞的这类任务的时候 多线程会比单线程快

Python进程、线程、协程 每个进程都有各自的一块独立的内存,保证进程彼此间的内存地址空间的隔离。这种任务虽然也可以用多任务完成,但是当任务过多时(超过cpu的核数),花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。:涉及到网络、磁盘IO的任务都是IO密集型任务,比如网络传输、数据库等调用、爬虫等,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(存在阻塞),99%的时间花费在IO上(因为IO的速度远远低于CPU和内存的速度)。 阅读详情

相关推荐

深度解析:并行与并发的本质区别,以及如何用线程、进程实现高效多任务

本文将通过通俗的比喻、代码示例和实战场景,彻底讲透它们的区别与联系,助你写出更高效的代码!,逻辑上看似“同时”,实际可能交替占用资源(如单核CPU通过时间片轮转运行多线程)。这两个概念常被混淆,但它们的设计目标、实现方式、适用场景截然不同。: 通过多进程实现并发(尤其在Python中绕过GIL限制)。: 在单核或多核CPU中,通过线程切换或并行执行实现并发。,依赖多核CPU、GPU或多机器等硬件支持。则是实现这两种任务处理模型的核心技术。:提高资源利用率,减少CPU空闲。:缩短任务总耗时,提升吞吐量。

大胆尝试,小心实践 783

多任务,并行,并发,进程,多进程,线程,以及区别以及对应的python代码

多任务: 1.多任务处理是指用户可以在同一时间运行多个应用程序,每个应用程序被称作一个任务 2,当多任务操作系统舒勇某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一个任务提供服务。因为任务调度机制保证不同任务之见切换十分迅速,因此给人多个任务同时运行的错觉 3.多任务系统中的三个功能单位:任务,进程,线程。 并行 并行:指在同一时刻,有多条指令在多个处理器上同时执行,所以无论从微观还时宏观来看,二者都是一起执行的(要求有多个电脑和多个处理器) 并发 并发:在同一时刻只能

qq_42773874的博客 1436

Python 基础 之 python 中 进程、线程、协程对比 区别和联系

Python 基础 之 python 中 进程、线程、协程对比 区别和联系 目录 Python 基础 之 python 中 进程、线程、协程对比 区别和联系 一、简单介绍 二、进程、线程、协程 的定义 1. 进程 2、线程 3、协程 二、进程、线程对比 1、功能 2、定义的不同 3、区别 4、优缺点 三、协程和线程差异 四、进程、线程、协程对比 1、通俗描述阐述...

仙魁XAN 5069

多任务是什么?如何执行?

多任务是什么?如何执行?多任务是指在同一时间内执行多个任务,任务的执行方式并发和并行两种方式,使用多任务就能充分利用CPU资源提高程序的执行效率,让程序具备处理多个任务的能力。 学习目标:掌握多任务的执行方式。

Blue92120的博客 6788

关于Tensorflow分布式并行策略

tensorFlow中主要包括了三种不同的并行策略,其分别是数据并行、模型并行、模型计算流水线并行,具体参考Tenssorflow白皮书,在接下来分别简单介绍三种并行策略的原理。 数据并行 一个简单的加速训练的技术是并行地计算梯度,然后更新相应的参数。数据并行又可以根据其更新参数的方式分为同步数据并行和异步数据并行,同步的数据并行方式如图所示,tensorflow图有着很多的部分图模型计算副本,单一的客户端线程驱动整个训练图,来自不同的设备的数据需要进行同步更新。这种方式在实现时,主要的限制就是每一次更新都是同步的,其整体计算时间取决于性能最差的那个设备。 数据并行还有异步的实现方式,如图所

STM32寄存器级电机驱动:DRV8833 H桥与PWM调速原理

电机驱动是嵌入式控制系统的核心基础能力,其本质是微控制器通过数字信号精确控制功率器件的开关时序。理解H桥电路结构、反电动势防护机制及PWM调制原理,是实现可靠直流电机控制的前提。DRV8833作为典型双H桥驱动芯片,支持快衰减与慢衰减两种PWM调速模式,分别对应不同的电流泄放路径与动态响应特性。在STM32平台上,需结合时钟树配置、GPIO复用、定时器寄存器(PSC/ARR/CCR)精确计算,将抽象的转速需求转化为可执行的硬件操作。该技术广泛应用于智能小车、机器人关节、工业定位系统等实时运动控制场景,是掌握

weixin_42613017的博客 676

异步、并行、多线程、多任务及相关概念全梳理

基础模型:异步解决阻塞问题,并行提升计算效率,多线程/多任务是操作系统层面的并发管理。进阶模型:协程、事件驱动、Actor模型等提供更细粒度的控制,适应不同场景需求。选型原则I/O密集型:异步+单线程(如Node.js)。CPU密集型:多线程+并行(如Java线程池)。实时响应:事件驱动+非阻塞I/O(如游戏引擎)。

程序猿视角 1455

Gamit10.71添加新的天线类型

添加新的天线类型需要涉及到四个文件:antmod.dat,rcvant.dat,guess_rcvant.dat,hi.dat。 注意:格式要一致!!! 举例说明,我要添加一个JCA229的天线(带JCAD天线罩),对应接收机使用的是南方的South Net-S9。

Penny的博客 2711

多任务与多重任务,并发与并行

多任务处理:同一个时间内计算机系统中如果允许多个进程同时处于运行状态,这便是多任务。 多重处理:对于有多个CPU的计算机,同时在每一个CPU上执行进程称为多重处理。 只有一个CPU的计算机,操作系统可以进行多进程并发执行,实现多任务处理。如果一台有多个CPU的计算机,操作系统既能进行多任务处理又能进行多重处理。 可不可以理解为: 多任务相当于并发? 而多重任务相当于并行? ...

skyyyyy_的博客 2849

115.工业相机海康SDK开发指南(阅读)

包含初始化SDK和反初始化SDK接口。(由于看不到函数内部的具体实现,因此以下的解释仅代表个人的理解)

weixin_63779802的博客 5993

【AI Infra】【RLHF框架】VeRL中WorkerGroup与Ray资源调度的协同机制剖析

本文深入剖析了VeRL框架中WorkerGroup与Ray资源调度的协同机制。通过解析Ray Placement Group的资源抽象和VeRL的RayResourcePool封装,详细阐述了WorkerGroup如何与底层资源精确绑定,并实现RLHF训练中异构、多阶段任务的灵活资源分配与动态调整,为大规模分布式强化学习训练提供了高效解决方案。

weixin_29204205的博客 389

网络编程-多任务,并发,并行--从底层工作原理解释,让你不再傻傻分不清这些到底什么意思...

知识点:我们经常会把多任务,并行,并发这些词挂在嘴边,但是你能了解这些词到底什么意思吗?工作原理是怎样的呢?其实有经验的程序员让他讲也讲不清,反正我之前就是糊里糊涂地,搞清底层运行原理,自然就分得清了,下面直接看图: 注意:下图的0.00001秒是我举得例子,并不是cpu真正运行速度 图上的解释字太小,我把拷贝出来: 1、多任务:几个程序同时运行 2、多任务分为并...

bangluan7686的博客 430

Python全栈入门到实战【基础篇 22】生成器与迭代器:底层逻辑与实战场景

Python迭代器与生成器:惰性求值的高效实践 摘要:本文深入解析Python中迭代器和生成器的核心机制与应用场景。迭代器通过实现__iter__()和__next__()方法实现惰性求值,适合处理大数据集和无限序列。生成器作为迭代器的简化实现,通过yield关键字自动实现迭代器协议,代码更简洁。文章详细对比了可迭代对象与迭代器的区别,演示了自定义迭代器和生成器函数的实现方式,并介绍了生成器表达式这一高效替代列表推导式的方案。通过斐波那契数列等实例,展示了惰性求值在内存优化方面的优势,以及生成器在流式数据处

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3262

02_多任务编程_Python进程和线程

多任务是指在同一时间内执行多个任务。例如: 现在电脑安装的操作系统都是多任务操作系统,可以同时运行着多个软件。① 线程是依附在进程里面的,没有进程就没有线程。② 一个进程默认提供一条线程,进程可以创建多个线程。

AGI爱好者_数仓&可视化&数据分析工程师_Vae’伯乐‘ 1314

国科大学习资料--计算机视觉(胡占义、董秋雷)--2018-2019第二学期期末试卷

国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 ...

无名何许人的博客 2166

Allegro如何去掉PCB内层未使用的过孔孔环?

在用Allegro进行PCB设计过程中,遇到铺铜铜箔被焊盘大量割断,导致铺铜不完整,这样就会导致铺铜过电流太小,影响板的性能,严重的会导致板工作不稳定,甚至不工作。解决办法:是去掉内层未使用的过孔孔环,增大过铜箔面积。

bhxc809751502的博客 2571

python多进程与多线程

进程程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程。例如:正在运行的qq,微信等他们都是一个进程

渗透之路,攻防之间皆学问 3893

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

多任务与并发编程详解:进程 vs 线程

多任务与并发编程:进程 vs 线程对比 本文系统解析多任务编程的核心概念,对比Python中多进程与多线程的实现方式。多任务分为并发(交替执行)和并行(同时执行),前者适用于单核/多核,后者需多核支持。 进程是资源分配的最小单位,各进程内存独立,适合CPU密集型任务,通过multiprocessing模块实现;线程是CPU调度的最小单位,共享进程内存,适合I/O密集型任务,通过threading模块实现。 关键区别:进程稳定性高但开销大,线程轻量但需处理共享变量竞争问题(如使用锁机制)。主进程/线程默认等待

yun_kumo1028的博客 1190

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python进程和线程

Python实现多任务主要依赖多进程和多线程。进程通过multiprocessing模块创建,能并行执行任务但资源开销大且不共享全局变量。线程使用threading模块,共享全局变量且资源开销小,但不能充分利用多核。创建进程或线程需指定目标函数和参数,通过start()启动。线程执行顺序由CPU调度决定。使用时需注意主进程/线程与子进程/线程的结束顺序,可设置守护进程/线程或显式销毁来管理。线程间共享变量可能引发数据竞争,需同步以确保数据一致性。选择多进程或多线程应基于具体需求。

taisu001的博客 1369

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python进阶————进程和线程

Python中多进程与多线程详解

记录学习笔记 1220

Python 多任务编程全解:进程、线程与协程从入门到实战

本文系统讲解 Python 多任务编程的核心技术:进程、线程与协程。从 “多任务的并发 / 并行概念” 切入,先解析进程的独立资源、多进程实现方式与注意事项(如进程不共享全局变量);再讲线程的共享资源特性、线程安全问题及同步方案;最后介绍协程的单线程并发优势与异步实战(如协程爬虫)。内容覆盖基础概念、代码实例、实战场景,破解 “进程 / 线程区别”“线程安全”“协程异步 IO” 等难点,是 Python 开发者掌握高效多任务编程的实用指南。

海市公约的博客 1453

听说过多线程,多进程,今天我们看Python多任务编程

作为多任务编程的基本概念,进程和线程的概念是无论如何回避不了的。很多公司面试时也会问倒二者的区别。如果到互联网上随便搜一下,就能找到关于进程和线程的文章,但是相信读过之后,懂得人会点头,不懂的还是不懂。所以本文采用另外一种方式来说明。

五包辣条的博客 1179

深入理解并行与并发:C++/Python实例详解

并发是指在同一时间段内处理多个任务的能力。并发并不一定意味着这些任务是同时执行的,而是指多个任务在逻辑上是同时进行的。并发可以通过时间分片(time-slicing)来实现,即在一个处理器上快速切换任务,使得用户感觉到多个任务在同时进行。特点任务可以在同一时间段内交替执行。适用于 I/O 密集型任务(如网络请求、文件读写等)。主要关注任务的管理和调度。并发和并行是处理多个任务的两种不同方式,前者强调任务的管理和调度,后者强调任务的同时执行。

码事漫谈 2318

Python中的进程和线程

三个进程分别操作的都是自己进程里面的全局变量my_list, 不会对其它进程里面的全局变量产生影响,所以进程之间不共享全局变量,只不过进程之间的全局变量名字相同而已,但是操作的不是同一个进程里面的全局变量。创建子进程会对主进程资源进行拷贝,也就是说子进程是主进程的一个副本,好比是一对双胞胎,之所以进程之间不共享全局变量,是因为操作的不是同一个进程里面的全局变量,只不过不同进程里面的全局变量名字相同而已。线程之间执行是无序的,是由CPU调度决定某个线程先执行的。并行:在一段时间内真正的同时一起执行多个任务。

weixin_45862390的博客 1240
上一篇: Python:面向对象的魔法方法__new__方法(写单例)
下一篇: Python:闭包与装饰器
python_nice
博客等级 码龄8年 46粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值