Python的进程和线程

ref

讲个故事先

这就像一个舞台(CPU核心)​,

要供多个剧组演出多个剧目(进程)​,

剧目中有多个各自独立的角色(线程)​,有跑龙套的,有主角,第一配角,第二配角等,

他们在同一个舞台(CPU和虚拟地址空间)上各自执行着自己的动作,互不干扰,偶有交谈(线程间共享访问变量)​;

还有专门的一个角色(I/O线程)负责向幕后人员(操作系统)发出信号(系统调用)控制幕布、灯光角度和颜色、背景图片道具切换的;

或许还有一个角色(负责创建新线程)专门负责通知幕后人员请其他角色(线程)上台执行以及向幕后人员申请舞台某个区域使用权的(申请分配新虚拟地址空间)​。

如果系统只有一个CPU核心,那么舞台上的所有角色(线程)只能一个接一个地执行,当一个角色举手投足时,其他角色都静止在原地,大家轮流执行,只要切换速度足够快,给观众的感觉就会是所有角色都在"同时"做出各种动作。

当某个角色执行完一个细小的时隙(比如10ms)后,幕后会响起一个闹铃(时钟中断)​,中断该角色的演出,

CPU停止执行该角色,并将该角色的身体各部位的位置(CPU内部关键寄存器值)保存起来,这个演员就可以下台休息了。

然后,幕后人员根据下一个要执行的角色按照之前方式保存的位置信息,将其身体形状拧巴成对应的形状(恢复安置各个寄存器值到CPU上)​,搬上台,然后CPU开始执行,该角色会继续从之前的断点执行,就好像什么也没有发生过一样。

接受几个设定:

进程是一家almost密不透风的公司,缅甸KK园区

线程里面工作的...人

进程**[园区]**内公共资源对于进程来说,可以共享.

别的园区[进程],一般不能和自己的园区共享人员资源,除非...

好的,现在再接受设定:

  1. 单个CPU任一时刻 只能执行单个线程,只有多核CPU还能真正做到多个线程同时运行
  2. 一个进程包含多个线程,这些线程可以分布在多个CPU上
  3. 多核CPU同时运行的线程可以属于单个进程或不同进程
    所以,在大多数编程语言中因为切换消耗的资源更少,多线程比多进程效率更高

也就是说,如果我是多核的,一个进程是可以同时允许多个线程一起执行的.

但是python呢?

不行

有个GIL锁,保证数据安全,它规定了:
在一个进程中每次只能有一个线程在运行

那线程之间如何协同共同的资源?

线程同步

同步表示一种协同办事

同步的实现方式有很多种:

  1. 使用锁的线程同步
  2. 使用Rlock的线程同步
  3. 使用信号量的线程同步
  4. 使用条件的线程同步
    (1)
    (2)上图;wait放锁,notify通知大家竞价

5.使用事件的线程同步

6.使用屏障的线程同步

7.使用队列的线程同步
ref

相关推荐
知乎的哥廷根数学学派21 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词21 小时前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
人工干智能1 天前
OpenAI Assistants API 中 client.beta.threads.messages.create方法,兼谈一星*和两星**解包
python·llm
databook1 天前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
阿部多瑞 ABU1 天前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab1 天前
VScode python插件
ide·vscode·python
知乎的哥廷根数学学派1 天前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
WangYaolove13141 天前
Python基于大数据的电影市场预测分析(源码+文档)
python·django·毕业设计·源码
知乎的哥廷根数学学派1 天前
基于自适应多尺度小波核编码与注意力增强的脉冲神经网络机械故障诊断(Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习
cnxy1881 天前
Python爬虫进阶:反爬虫策略与Selenium自动化完整指南
爬虫·python·selenium