news 2026/5/14 18:54:05

进程线程协程?一文解决!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程线程协程?一文解决!

前言

大家好,这里是程序员阿亮!

这一期来给大家讲解一波很多人容易搞错的概念:进程、线程、协程

一、 进程 (Process):资源分配的最小单位

1. 什么是进程?

进程是操作系统中正在运行的一个程序的实例。你可以把它想象成一个“容器”,里面装着程序运行所需的所有资源。

2. 进程拥有的“共有资源”有哪些?

这是一个核心面试题。当一个进程被创建时,操作系统会为其分配一个独立的地址空间,包含以下共有资源:

  • 代码段 (Code Segment):存储程序的可执行二进制代码。

  • 数据段 (Data Segment):存储全局变量和静态变量。

  • 堆 (Heap):动态内存分配区域(如 C++ 中的malloc或 Java 中的new)。

  • 文件描述符表 (File Descriptors):进程打开的文件、套接字(Socket)等句柄。

  • 信号处理器 (Signal Handlers):处理系统信号的配置。

  • 内存映射 (Memory Mapping):映射的共享库或文件。

特点:进程与进程之间是完全隔离的。一个进程崩溃,通常不会直接导致另一个进程崩溃。


二、 线程 (Thread):CPU 调度的最小单位

1. 什么是线程?

线程是进程内部的一个执行流。一个进程可以包含多个线程,它们共享进程的资源,但每个线程有自己独立的执行状态。

2. 线程独有的资源

虽然线程共享进程的大部分资源,但为了独立运行,它必须拥有:

  • 栈 (Stack):存储局部变量和函数调用链。

  • 寄存器/程序计数器 (PC):记录当前线程执行到了哪一行代码。

3. 进程 vs 线程

特性进程 (Process)线程 (Thread)
本质资源分配的基本单位执行/调度的基本单位
开销切换开销大(需要切换页表、缓存等)切换开销小(共享地址空间)
通信比较复杂(IPC、管道、Socket)非常简单(直接读写共享内存)
健壮性高(相互隔离)低(一个线程死掉可能拖垮整个进程)

三、 协程 (Coroutine):用户态的“轻量级线程”

1. 什么是协程?

协程又被称为“微线程”。它不属于操作系统内核管理,而是完全由**程序员或编程语言运行时(Runtime)**控制的执行单元。

2. 为什么要用协程?

在高并发场景下(如处理 10 万个并发连接),如果开 10 万个线程,操作系统会被频繁的内核态切换累死。

  • 线程切换:需要进入内核态,保存寄存器、堆栈,代价昂贵。

  • 协程切换:在用户态完成,就像在代码里调用一个函数一样快。它通过yield/resume机制,在任务阻塞时主动交出控制权。

代表作:Go 语言的goroutine,Python 的asyncio


四、 总结:三者的进化逻辑

我们可以用一个工厂的比喻来做最终总结:

  1. 进程 = 工厂车间

    • 车间之间是独立的(资源隔离)。

    • 一个车间里有生产线、原材料仓库(共有资源)。

  2. 线程 = 车间里的工人

    • 多个工人共享车间的空间和材料(共享资源)。

    • 工人之间协作很快,但容易为了抢工具打架(线程安全/锁问题)。

  3. 协程 = 工人的“多面手”技能

    • 一个工人(线程)不再死等机器(IO)运转,而是在等待期间去处理另一份工作。

    • 这种切换是工人自己决定的(用户态调度),不需要厂长(操作系统)来传话。


核心对比表

维度进程线程协程
由谁管理操作系统内核操作系统内核程序员/编译器 (用户态)
切换成本极高 (Context Switch)中等极低
资源消耗大 (独立内存空间)中 (独享栈)极小 (几 KB)
并发能力低 (受限于硬件资源)中 (受限于内核调度)极高 (百万级并发)

总结

一句话建议:

如果你需要安全隔离,用进程;如果你需要利用多核 CPU 提速,用多线程;如果你需要处理超高并发的 IO 任务(如 Web 服务器),请拥抱协程

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 18:52:05

你的数字相册管家:用AntiDupl智能清理重复与缺陷图片

你的数字相册管家:用AntiDupl智能清理重复与缺陷图片 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾在整理照片时,发现硬盘里藏着无数…

作者头像 李华
网站建设 2026/5/14 18:52:04

第75篇:Vibe Coding时代:LangGraph 自动选择回归测试实战,解决每次全量测试太慢、局部测试又漏的问题

第75篇:Vibe Coding时代:LangGraph 自动选择回归测试实战,解决每次全量测试太慢、局部测试又漏的问题 一、问题场景:Agent 每次改一点代码,却要跑全部测试 在真实项目中,测试集可能非常大: 1000 个单元测试 300 个集成测试 几十个端到端测试 完整 CI 跑 30 分钟Agent …

作者头像 李华
网站建设 2026/5/14 18:48:41

借助模型广场与多模型可选性优化你的 AI 应用选型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 借助模型广场与多模型可选性优化你的 AI 应用选型 在构建基于大语言模型的应用程序时,一个核心的决策点是模型选型。不…

作者头像 李华
网站建设 2026/5/14 18:47:33

(B站TinyML 教程学习笔记)C15 - 在 Edge Impulse 中训练模型+C16 - 如何评估模型性能+C17 - 欠拟合与过拟合+C18 - 如何使用模型进行推理

00:07 - 进入神经网络分类器页面完成特征提取后,进入神经网络分类器页面。这里可以配置模型与训练过程。这些配置项都属于“超参数”。一、训练中的核心超参数00:23 - Epoch(训练轮数)模型完整遍历一次训练集,并更新参数。这称为一…

作者头像 李华
网站建设 2026/5/14 18:36:14

ExifToolGUI:让照片元数据管理变得简单高效的5个秘诀

ExifToolGUI:让照片元数据管理变得简单高效的5个秘诀 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾经面对成百上千张照片,想要批量修改拍摄时间、添加版权信息&#xff0c…

作者头像 李华