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

【Python】 进程与线程 在计算机操作系统中,进程是资源分配和调度的基本单位。每个进程都有自己独立的内存空间、代码执行上下文以及系统资源,如文件描述符、网络连接等。进程之间相互隔离,一个进程的崩溃通常不会影响到其他进程。 在 Python 中,多进程编程允许我们充分利用多核处理器的优势,并行地执行多个任务,从而提高程序的执行效率和响应速度。例如,在处理大规模数据计算、网络爬虫的并发请求、图像处理等任务时,多进程可以显著缩短执行时间。 阅读详情

1. 简单理解

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

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

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

进程的空间:车间的空间

在这里插入图片描述

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

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

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

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

(3) 说明

  • mutex是semaphore的一种特殊情况(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多进程与多线程编程(工作学习面试必读)
python-进程和线程 进程: 一个程序的执行实例就是一个进程,表现为程序是源代码编译后的文件,而这些文件存放在磁盘上。当程序被操作系统加载到内存中,就是进程。 进程中存放着指令和数据(资源),它也是线程的容器。 进程( Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 Linux进程有父进程、子进程,Windows的进程是平等关系 线程: 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运行单位。 线程,有时被称为轻量级进程 阅读详情

相关推荐

Chrome底层架构实战:进程线程调试与插件开发原理

浏览器多进程架构是现代Web应用稳定与安全的基石,其核心在于操作系统级的资源隔离机制——进程作为内存、句柄、网络等内核对象的法律边界,线程则体现为V8 Isolate、Blink调度与OS内核线程的三层映射。理解这一原理,才能穿透DevTools表象,定位如‘jmeter压测机线程不多却端口占满’这类典型问题:本质常是Network Process的socket句柄耗尽,而非JMeter自身配置;同样,‘chrome插件如何开发’的实践瓶颈,往往源于对Extension Process与Renderer P

soyo的专栏 752

详解Python进程与线程

另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。CPU的时间片轮转,在不同的时间段切换执行不同的进程,但是切换进程是比较耗时的;就引来了轻量级进程,也就是所谓的线程,一个进程中包括多个线程(代码流,其实也就是进程中同时跑的多个方法体)当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程。

黑马程序员官方博客 3159

Python多线程与多进程选型指南:IO密集型vs CPU密集型

在Python开发中,并发编程的核心在于区分任务类型——IO密集型(如网络请求、文件读写)依赖多线程高效利用等待时间,而CPU密集型(如数值计算、图像处理)需借助多进程绕过GIL实现真正并行。其底层原理源于CPython的全局解释器锁(GIL)机制:它允许多线程并发等待,但禁止多线程并行执行CPU指令。因此,合理选型直接决定性能上限与系统稳定性。典型应用场景包括网页爬虫、日志分析、批量数据处理及模型训练等。本文聚焦Python、IO-bound和CPU-bound三大热词,提供可落地的决策框架与避坑实践。

banglvfei0870的博客 420

python中的进程与线程

python进程和线程

HBT036017的博客 2046

开源CC6920差分霍尔电流传感器模块实战指南——从选型到波形分析

本文详细介绍了CC6920差分霍尔电流传感器模块的选型、硬件连接、参数计算及波形分析技巧。通过实战案例,展示了该开源硬件在电流测量中的优势,包括超低内阻、电气隔离和抗干扰能力,适用于电机控制、开关电源保护等场景。

weixin_28738397的博客 376

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 406

深入理解Python中的进程与线程

今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此在当下不管是用什么编程语言进行开发,实现让程序同时执行多个任务也就是常说的“并发编程”,应该是程序员必备技能之一。为此,我们需要先讨论两个概念,一个叫进程,一个叫线程。

weixin_45841831的博客 1305

Python实战:用NumPy实现LU分解与QR分解(附代码对比)

本文深入探讨了使用NumPy实现LU分解与QR分解的实战方法,通过代码对比分析了两种矩阵分解技术的原理、数值稳定性差异及核心应用场景。LU分解适用于高效求解线性方程组,而QR分解凭借其正交化特性,在求解最小二乘问题和处理病态矩阵时更具优势。文章提供了详细的Python代码示例,帮助开发者根据具体问题选择最合适的分解方法。

php55的博客 1212

【Python】python新手保姆级教程------第 13 章 进程与线程

一种 “依附于主进程存在的子进程”,一旦主进程结束,它就会被自动终止。简言之:主进程一死,守护进程必跟着死。

朱朱博客,分享技术 214

记录LeNet的硬件加速器设计(一)

LeNet的硬件加速器设计实现。

2301_81029398的博客 3543

【单智能体】AI 数据分析智能体案例讲解(附完整源码)

本案例将引导您构建一个基于 AI 的数据分析智能体,让用户能够通过自然语言查询来分析 CSV 和 Excel 文件中的数据,无需掌握 SQL 知识。该智能体使用 Agno Agent 框架集成 OpenAI GPT-4o 模型,并利用 DuckDB 提供高效的数据处理能力。

rengang66的博客 239

Python【多进程与多线程】实战指南:解锁单机并行处理的高效秘籍

本文深入解析Python多进程与多线程的核心差异与应用场景,提供实战指南。针对计算密集型任务,推荐使用多进程以充分利用多核CPU;对于I/O密集型任务,多线程能有效利用等待时间。文章通过代码示例详细介绍了multiprocessing和threading模块的使用,并提供了进程间通信、线程同步及进程池/线程池等高效工具,帮助开发者解锁单机并行处理能力,大幅提升程序运行效率。

weixin_29032489的博客 270

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 303

Python(11) 进程与线程

本文介绍了Python中多进程编程的基本概念与实现方法。主要内容包括:并发与并行的区别,进程的定义(操作系统资源分配的基本单位),以及使用multiprocessing模块创建进程的三种方式:通过Process类直接创建、继承Process类自定义子类、使用进程池批量管理进程。文章重点解析了Process类的参数含义(target、args、kwargs等)和使用模板,并通过文件读写案例演示了多进程的实际应用。特别强调了Windows系统下必须使用if name == "main"保护主

qq_56012214的博客 386

005、开关电源中的基本拓扑结构简介

本文介绍了开关电源设计中常见拓扑结构的特性与选型经验。文章从实际炸机案例入手,强调深入理解拓扑的重要性,详细分析了Buck、Boost、Buck-Boost等非隔离拓扑以及反激、正激、半桥、全桥、LLC等隔离拓扑的工作原理、设计要点和典型误区,重点指出各拓扑的电压/电流应力、效率瓶颈和常见设计错误。作者根据多年经验总结出不同功率等级和输入输出条件下的拓扑选型原则,并强调细节设计对成败的决定性影响。文章通过大量工程实例说明,正确的拓扑选择和参数计算是电源设计成功的基础,而忽略基础原理将导致反复修改甚至炸机风险

Jack010169的博客 224

Codesys入门-新建工程+任务调用+编译+调试

程序组织单元(Program Organization Unit, POU)由声明区和代码区组成,是用户程序的最小软件单元,它相当于传统编程系统中的块(Block),按功能程序组织单元(POU)可分为函数(FUN)、功能块(FB)、程序(PRG)。:Codesys采用多任务的方式来执行用户程序的“任务”,而每个“任务”分配了不同的执行周期,有些全局变量可能要在不同的POU之间被访问和修改,于是需要对全局变量进行交互同步,也是在任务的“时间对准点”进行的,实例:声明了INT类型,变量名为输入;

刺客 1万+

python标准库、threading、multiprocessing、aiomultiprocess、进程/线程 同步、queue(队列)

multiprocessing 包提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。

freeking101的博客 2万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python并发编程——多线程thread,多进程process,多协程coroutine的区别与选择

目录1. IO-Bound与CPU-Bound2.多进程,多线程,多协程的对比3.如何进行选择? 1. IO-Bound与CPU-Bound IO-Bound         IO-Bound指的是程序的运行效率受计算机IO能力的限制。在程序的运行过程中,我们可能经常需要使用到计算机IO,如文件的读写操作,网络拉取下载操作等等。在这些情况下,由于IO操作没有返回相应的结果,程序不得不中止并等待。 CPU-Bound  &nbs

Pinkgranite86的博客 734

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python一点通: 并行技术有几种? thread和process有什么区别

在Python中,并行性是一种技术,允许程序同时执行多个任务,从而提高整体性能。Python提供了几种实现并行性的方法,包括线程(threading)、多进程(multiprocessing)以及concurrent.futures模块。在本博文中,我们将探讨线程和进程的概念,它们的区别以及何时选择它们。我们还将介绍concurrent.futures模块作为Python中并行计算的高级接口。我们将提供示例来说明如何使用线程、进程和concurrent.futures进行并行计算。

《人工智能原理与实践》作者 2197

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python multi_Python multi-process VS multi-thread (多核CPU利用率)

现在用python开发服务器代码,因此简单对比了一下其multi-process和multi-thread的CPU利用率对比图(top命令),结论:python(cpython)由于GIL的存在无法使用threading充分利用CPU资源,如果服务器为多核,请考虑使用multi-process提升性能多进程(multi-process)多线程(multi-thread)源代码多进程(multi...

weixin_39880337的博客 383

Python 多任务编程:进程、线程、协程全解

在 Python 开发中,多任务编程是提升程序执行效率、充分利用 CPU 资源的核心手段,而进程和线程是实现多任务的两种核心方式。这篇博客主要讲python多线程和多进程的原理和常用操作,python多任务编程和java的内容和用法都是相似的。

勇往直前的博客 565

Python进程与线程实战:从GIL原理到并发编程场景选择

并发编程是现代软件开发的核心概念,它通过同时执行多个任务来提升程序效率。其基本原理是利用操作系统提供的进程和线程机制,进程作为资源分配的基本单位提供隔离性,线程作为轻量级执行流共享内存空间。这一技术的核心价值在于充分利用多核CPU资源,提升I/O密集型任务的吞吐量和响应速度。在Python中,全局解释器锁(GIL)是一个关键特性,它使得多线程在CPU密集型任务中无法实现真正的并行,但在I/O密集型场景下,多线程能有效提升性能。实际应用场景包括Web服务器处理并发请求、数据爬虫并行下载、以及科学计算的并行处理

weixin_33713707的博客 657

Python并发编程实战:进程、线程与GIL原理深度解析

并发编程是现代软件开发的核心概念,旨在通过同时执行多个任务来提升程序效率。其基本原理是利用操作系统提供的进程和线程机制,进程作为资源分配的基本单位提供隔离性,线程作为轻量级执行流共享内存以实现高效协作。这一技术的核心价值在于充分挖掘多核CPU潜力,应对高并发场景,提升系统吞吐量和响应速度。在Python中,并发编程主要应用于Web服务器处理海量请求、数据爬虫并行下载、GUI程序保持界面响应,以及科学计算的并行处理等场景。然而,Python特有的全局解释器锁(GIL)机制对多线程执行CPU密集型任务构成了限制

weixin_34060299的博客 399

子线程vs子进程创建速度

子线程vs子进程创建速度 from threading import Thread from multiprocessing import Process import time def task(name): print(f'{name} is running') time.sleep(2) print(f'{name} is end') if __name...

231

一篇文章搞懂Python中的进程和线程

转自:http://yangcongchufang.com/%E9%AB%98%E7%BA%A7python%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/python-process-thread.html Directory Directory多进程 multiprocessing进程池 Pool子进程进程间通信进程小结多线程Lock多核CPUThreadL...

LFGxiaogang的博客 462

Python多线程与多进程选型决策指南:从GIL到生产级调度

Python并发编程的核心矛盾在于解释器层(GIL)与操作系统层(线程/进程调度)的协同机制。理解GIL的真实作用域——它仅锁定Python对象内存管理,而非所有CPU操作——是突破性能瓶颈的前提;而多进程的价值本质是突破内存共享边界、实现真正的CPU并行与故障隔离。技术选型不应止步于‘IO密集用线程、CPU密集用进程’的粗粒度划分,而需结合资源瓶颈定位(CPU%、内存增长、IPC开销)、C扩展库GIL释放行为、数据传输规模及容错等级,构建可量化的调度决策树。本文聚焦真实生产环境中的混合型任务场景,提供基于

diandingyin9417的博客 427
上一篇: 2021如何搜索别人的gitbook?
下一篇: Python 递归
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值