当前位置: 首页 > news >正文

线程、进程、协程区别总结

一、核心定义(30秒开场)

  • 进程:资源分配和隔离的基本单位(独立地址空间)。
  • 线程:CPU 调度的基本单位(线程间共享进程内存)。
  • 协程:用户态轻量并发单位(由运行时/事件循环调度)。

一句话版本:

进程负责隔离资源,线程负责系统调度,协程负责用户态高并发 I/O。


二、高频对比维度

1) 资源隔离

  • 进程:强隔离,稳定性高。
  • 线程:共享内存,通信方便但有同步风险。
  • 协程:同线程内共享上下文,切换最轻。

2) 调度与切换成本

  • 进程/线程:内核调度。
  • 协程:用户态调度(async/await)。
  • 成本:进程 > 线程 > 协程

3) 并发与并行

  • 并发:同一时间段推进多个任务。
  • 并行:同一时刻真正同时执行(多核)。
  • 结论:协程擅长并发,不天然等于并行

三、Python 选型方法(面试重点)

总原则

  • CPU 密集:优先多进程(multiprocessing/ProcessPoolExecutor)。
  • I/O 密集 + 阻塞库:优先多线程(threading/ThreadPoolExecutor)。
  • 高并发 I/O + 全链路 async:优先协程(asyncio)。

线程 vs 协程怎么选

  1. 是否有成熟 async 库(HTTP/DB/缓存/MQ)?
  2. 并发规模是否很大(上千连接)?
  3. 改造成本能否接受?

可复述:

高并发 I/O 通常优先协程,但前提是关键链路支持 async;否则线程更务实。


四、为什么“阻塞调用会破坏协程优势”

协程要靠await主动让出执行权。
如果在async def里混入重阻塞调用(如time.sleeprequests.get、同步 DB 调用、重 CPU 计算),事件循环会被卡住,其他协程也无法及时运行。

可复述:

协程优势建立在“可让出”上;阻塞调用不让出,协程并发收益会明显下降。


五、线程同步问题(共享内存的代价)

同步问题是什么

多线程并发读写共享变量,若无保护会出现时序不确定,导致结果错误。

竞态(Race Condition)

  • 定义:结果依赖执行先后时机,表现为“偶发错、难复现”。
  • 例子:两个线程同时counter += 1可能丢增量(读-改-写不是原子整体)。

同步原语(常见)

  • Lock/RLock
  • Semaphore
  • Condition
  • Event
  • 线程安全Queue

六、IPC(进程间通信)总结

IPC 是什么

IPC(Inter-Process Communication)是进程间通信机制。进程默认内存隔离,必须通过 IPC 交换数据。

常见 IPC 手段

  • 管道(Pipe)
  • 消息队列(Queue)
  • 共享内存(SharedMemory)
  • Socket

七、今天实操案例复盘

1) Queue 案例(订单处理)

  • 初版是 1 个 worker:功能上体现 IPC,但处理仍近似串行。
  • 改成多 worker(3 个子进程)后:同一任务队列并行消费,出现明显提速。
  • 关键点:结束时要发送与 worker 数量一致的哨兵(None)。

2) Pipe 案例

  • Pipe()返回两端连接对象(地位对等)。
  • 常见写法叫parent_conn/child_conn,只是命名习惯。
  • recv()默认阻塞:不发送消息就会一直等待。

3) SharedMemory 案例

  • SharedMemory(create=True, size=4):创建 4 字节共享内存。
  • SharedMemory(name=shm_name):按名字连接到已有共享内存。
  • struct用于int <-> bytes转换(pack/unpack)。

4) Socket 案例

  • socket(AF_INET, SOCK_STREAM):创建 IPv4 TCP 套接字。
  • bind:绑定本机 IP+端口(服务端门牌号)。
  • recv(1024)默认阻塞(可配超时/非阻塞模式)。

八、面试可直接背诵(40秒)

在 Python 里我先看瓶颈:CPU 密集用多进程;I/O 密集再看技术栈,阻塞库或低改造成本优先线程池,全链路 async 且高并发优先协程。协程提升的是并发效率,不等于并行;如果在协程里混入阻塞调用,会卡住事件循环。线程因为共享内存要处理同步问题,比如竞态和死锁。进程之间默认隔离,需要通过 IPC(队列、管道、共享内存、socket)通信。

http://www.jsqmd.com/news/453589/

相关文章:

  • LiuJuan20260223Zimage网站内容分析与SEO优化建议生成
  • 某教育企业智能合规平台架构实践:用AI满足教育行业合规
  • Ubuntu下丝滑地安装OpenClaw
  • Z-Image-GGUF算力优化:KSampler参数调优使单卡吞吐量提升2.3倍
  • SenseVoice-Small入门实战:快速构建个人语音笔记应用
  • 基于Reactor模式的简易HTTP服务端学习报告
  • 机顶盒设置密码/设置操作码/恢复出厂设置密码 2026年最新汇总分享
  • SUPER COLORIZER效果对比专题:不同参数下的色彩饱和度与风格差异研究
  • Lightroom 11.2.2 | Adobe出品,摄影师版PS,P图神器
  • 万物识别-中文镜像行业落地:林业遥感图像树种识别+林龄区间预测辅助
  • 2026年智能爬虫天花板:LLM+Python实现非结构化数据一键结构化提取
  • Spring_couplet_generation 环境隔离:Anaconda虚拟环境创建与管理
  • 光伏功率预测创新模型!基于非线性二次分解Ridge-RF-LSBoost时间序列预测MATLAB代码
  • 多任务学习:一鱼多吃
  • 数据结构优化:提升Qwen3-TTS语音特征处理效率
  • 自动驾驶3D目标检测:星图AI平台训练PETRV2-BEV模型教程
  • nlp_structbert_sentence-similarity_chinese-large实战:Java微服务中的语义查重与去重
  • 纯js表格编辑器已开源
  • 计算机组成原理 —— 计算机系统概述
  • 虚拟化中断传递的演进
  • 定制专属AI智脑:数谷智能助力企业沉淀核心数据价值
  • 墨语灵犀保姆级教程:解决‘砚池无响应’‘印章不显示’等6类常见问题
  • 使用CasRel进行软件测试报告分析:自动关联缺陷与代码模块
  • 信奥赛C++提高组csp-s之快速幂(案例实践1)
  • SmolVLA实战教程:Python调用app.py接口实现批量动作推理自动化
  • P1017 [NOIP 2000 提高组] 进制转换
  • css学习笔记
  • 【宠物领养系统】~Python+Vue3+管理系统网站+2026原创
  • GIMP中文版下载安装指南:不花钱的专业修图软件(2026最新版)
  • 物联网技术综合实训教程【2.0】