Python 进程与线程(Process vs. Thread)

1. 简单理解

CPU:一座(电力有限的)工厂

在这里插入图片描述

  • 电力一次只能供给一个车间运行:单个CPU一次只能运行一个任务
  • 注:多核的CPU就像有了多个发电厂,使多工厂(多进程)实现可能。

进程:工厂的车间——”容器“

  • 进程代表CPU所能处理的单个任务
  • 任一时刻,CPU总是运行一个进程,其他进程处于非运行状态

线程:(同一个)车间里的工人——容器中的“工作单位”

在这里插入图片描述

  • 一个车间里,可以有很多工人:一个进程可以包括多个线程

  • (同一进程的)线程共享空间:一个进程的内存空间是共享的,每个线程都可以使用共享内存

进程的空间:车间的空间

在这里插入图片描述

(1)空间仅容纳一人:使用互拆锁(Mutual exclusion)

  • 每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所:代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存
  • 门口加锁防止他人进入:“互斥锁”(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域

(2)空间可容纳 n 个人:使用信号量(Semaphore)

  • 还有些房间,可以同时容纳n个人,比如厨房:这好比某些内存区域,只能供给固定数目的线程使用
  • 在门口挂n把钥匙,进去的人就取一把钥匙,出来时再把钥匙挂回原处:这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突

(3) 说明

  • mutexsemaphore的一种特殊情况(n=1时),因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

2. 本质核心

进程和线程简单而基本靠谱的定义如下:

  1. 进程:程序的一次执行
  2. 线程:CPU的基本调度单位

注:线程其实是轻量级进程(Lightweight Process,LWP)

关于多进程和多线程,教科书上最经典的一句话是:”进程是资源分配的最小单位,线程是CPU调度的最小单位。“

结合上面的简单理解:
进程是一个正在执行的任务(程序),由CPU来分配一个容器,一个空间;而线程就是在这个空间中具体完成这个任务的单位。

进程

进程分类

  • 系统进程
  • 用户进程
  • 父进程
  • 子进程

进程的状态

(1)三态模型

  • 就绪
  • 运行
  • 阻塞
    (2)五态模型

线程

3. 代码实例

3.1 多进程

3.2 多线程

参考总结的 Python 多线程:Python 多线程:伪多线程?详细代码总结

4. 更多:操作系统

(待看)

参考:

  1. 进程与线程的一个简单解释
  2. 【系统架构师修炼之道】(13):操作系统基础知识——进程基础知识
  3. 为什么校招面试中“线程与进程的区别”老是被问到?我该如何回答?
  4. 一文看懂Python多进程与多线程编程(工作学习面试必读)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值