【保姆级】线程Thread到底是什么?一文彻底搞懂

简介: 本文面向C/C++学习者,通俗讲解多线程编程的必要性与核心概念:从多核CPU发展切入,对比进程与线程(以“工厂—生产线”类比),阐明线程是进程内可并发执行的任务单元,强调多线程对提升程序性能的关键作用。

学完 C/C++ 语言的读者,如果想深耕自己的技术栈,多线程编程是每个程序员必须掌握的技术,继续学习多线程编程是非常不错的选择。


自上世纪 90 年代末,CPU 开始朝着多核的方向发展,也就是给 CPU 安装多个核心(内核),每个核心都能独立地执行计算机指令。在任意时刻,单核 CPU 只能处理一个任务(如下图 a)所示),而多核 CPU 可以同时处理多个任务(如下图 b) 所示),大幅提升程序的执行效率。


图 1 CPU单核 VS 多核


现如今,常见的计算机比如电脑、手机、平板等,CPU 都是多核的,比如 4 核、8 核、12 核甚至更多,多核 CPU 已经成为计算机的标配。


大家先前编写的 C/C++ 程序,任意时刻只能执行一条指令,整个运行过程中也只能利用 CPU 的一个核心,多核 CPU 的优势根本发挥不出来。通过学习多线程编程技术,大家可以编写出“同时执行多个任务”的程序,充分利用 CPU 的多核优势,让程序的执行效率得到质的提升。

什么是线程

学习多线程编程,首先要搞清楚什么是线程。


关于这个问题,很多教程都给出了答案,比如说:

  • 线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程的实际运作单位;
  • 线程是进程中的⼀个执⾏单元,负责当前进程中程序的执⾏,⼀个进程中⾄少有⼀个线程;
  • 在计算机专用术语中,线程是指机器中连续的、顺序的属性集合。一个线程包含执行一系列机器指令所必须的机器状态,包括当前指令位置、地址和数据寄存器等。


它们的说法完全正确,而且非常严谨,从不同的角度诠释了线程的含义。但是,初学者真心看不懂,他们用板砖拍自己脑门也想不明白,线程究竟是个什么玩意,典型的只说“官话”不说“人话”。


线程和进程的关系非常密切,要想搞清楚线程是什么,必须先对进程有所了解。

进程(Process)

大家经常使用的操作系统,比如 Windows、Linux、Mac OS X、Android 和 iOS 等,它们都属于多任务操作系统,即可以同时运行多个程序。


以 Windows 为例,它支持同时运行 QQ、微信、迅雷、网易云音乐等多个应用程序,所以 Windows 是一款支持多任务的操作系统。


在多任务操作系统中,对于同时执行的多个程序,操作系统负责给它们分配执行所需要的全部资源(CPU、内存、I/O 设备等),还负责在适当的时机(比如程序执行结束后)回收这些资源。


为了让操作系统高效地管理(分配和回收)计算机资源,人们提出了“进程”的概念。


当一个程序执行时,操作系统负责分配所需要的全部资源,包括程序代码、数据、CPU、内存、I/O 设备等,这些资源就会组织成为一个进程。也就是说,程序执行时,操作系统会创建进程给它分配资源;程序执行结束后,操作系统会销毁进程回收资源。通过创建和销毁进程,操作系统就实现了对计算机资源的高效管理。


计算机中执行着多少个程序,就存在多少个进程,进程和正在执行的程序之间是一一对应的关系,所以我们习惯用进程代表正在执行的程序,经常会说:进程就是正在执行的程序。


对于系统中存在的多个进程,每个进程都拥有自己的内存空间和系统资源,它们之间相对独立,执行过程中不会互相干扰。


总结一下,进程包含程序执行所需要的全部计算机资源,包括程序代码、数据、CPU、内存、I/O 设备等。操作系统以进程为单位管理(分配和回收)计算机资源,也就是很多教材中讲的“进程是操作系统进行资源分配和调度的基本单位”。

注意,程序和进程是两个不同的概念。未执行的程序只是一段代码,通常以文件的形式存储在硬盘中,不占用系统资源(CPU、内存、I/O 设备等);进程指的是正在执行的程序,会占用系统资源,由操作系统负责管理。

线程(Thread)

读到这里,大家已经对进程有了大致的了解。线程和进程的联系非常紧密,接下来通过对比进程和线程,带大家理解线程的含义。


我们知道,每个正在执行的应用程序都是一个进程。重新观察图 1,一个完整的程序可能由多个任务组成,有些任务是可以独立执行的(和其它任务同时执行,如图 1b) 所示),每个独立执行的任务都是一个线程。


也就是说,线程是进程的一部分,进程和线程的关系如下图所示:


图 2 进程和线程的关系和区别


一个进程可以包含多个线程,它们可以共享进程的内存空间和一些系统资源,包括程序代码、数据(全局变量、静态变量、堆内存)、打开的文件资源、网络连接等。当然,各个线程也有一些私有的资源,比如程序计数器、栈内存、寄存器等。


一个进程至少要包含 1 个线程,原因很简单,进程只是操作系统为了方便管理计算机资源才创建的,真正负责执行程序的是线程,而不是进程。


当进程中只有一个线程时,所有的程序代码全部由该线程负责执行,这样的程序叫做单线程程序;当进程中包含多个线程时,每个线程分别负责执行一个任务,这样的程序叫做多线程程序。

单线程程序和多线程程序各有优缺点。单线程程序编写简单、易于调试,缺点是只能顺序执行程序,适用于简单的应用场景;多线程程序可以同时执行多个任务,执行效率高,但编写和调试过程比较复杂,容易出现数据竞争、死锁等问题,适用于复杂的应用场景。

举例讲解进程和线程的关系

如果把进程看做是一间工厂,那么线程就是工厂里的一条条生产线,如下图所示:


图 3 把进程比作工厂,把线程比作生产线


工厂可以包含很多条生产线,至少也要包含一条生产线。真正负责生产商品的是生产线,而不是工厂。


同属一家工厂的所有生产线,可以共享工厂的一些资源,比如工作场地、技术图纸、原材料、食堂等。每条生产线也有自己的私有资源,比如机器设备、生产记录,私人物品存储柜等。

总结

进程可以是使操作系统更高效地管理计算机资源。当程序执行时,操作系统会创建一个进程,进程包含程序执行所需要的全部资源(CPU、内存、I/O 设备等);当程序执行结束后,对应的进程会被操作系统销毁,占用的资源也会被操作系统回收。


线程是进程的一部分,一个进程可以包含多个线程,但至少要包含一个线程。真正负责执行程序的,是线程,而不是进程。


现如今,很多应用程序(软件)都是多线程程序,例如 QQ 支持同时和多个好友聊天、迅雷可以同时下载多个资源、大部分杀毒软件可以同时开启杀毒、清理垃圾、电脑加速等功能。


了解了什么是线程和多线程之后,接下来系统地讲解多线程编程,教大学编写多线程程序。

相关文章
|
27天前
|
人工智能 监控 API
不仅是盘点:2026数据治理工具推荐,背后的技术架构演进分析
2026年,数据治理正从“工具拼凑”迈向“操作系统”范式:以阿里云Dataphin为样本,呈现流批一体、AI原生、语义驱动的架构跃迁——治理能力深度嵌入研发全流程,Data Agent实现目标驱动自治,语义知识图谱支撑大模型直接调用,真正成为可计量、可运营、可被AI消费的数据基础设施。
|
1月前
|
人工智能 自然语言处理 监控
不止降本增效:AI智能客服如何成为企业业务增长新引擎
瓴羊Quick Service是阿里云推出的企业级智能客服平台,融合大模型与AI Agent技术,实现从“被动应答”到“主动服务+任务执行”的跃迁。支持多渠道接入、多模型灵活切换,AI问答准确率达93%,可自动查物流、改地址、催发货等,助力企业降本增效、转化销售、驱动决策,真正将客服升级为“增长引擎”。
|
3月前
|
人工智能 JavaScript API
从开题到答辩:用百炼 CLI 一条命令跑通论文写作全链路
论文写作正陷于“工具碎片化”困境:查重、AIGC检测、降重、润色、参考文献、LaTeX校对等需切换十余平台。百炼CLI `bl text chat` 以统一长文本对话能力,覆盖开题至答辩9大环节,一次登录、一套计费、可编程批处理,成本低、合规强,助力研究生高效、规范完成学术写作。(239字)
从开题到答辩:用百炼 CLI 一条命令跑通论文写作全链路
|
3月前
|
存储 监控 数据处理
基于 YOLO11 的工业厂区泄漏隐患检测:从数据标注到云上训练工程实践
本文基于YOLO11构建工业厂区泄漏隐患检测系统,涵盖数据标注(1969张960×960图像,单类leakage)、云上存储管理、训练调优(imgsz=960, batch=16)及模型评估全流程,助力实现7×24小时自动化巡检与早期告警。
基于 YOLO11 的工业厂区泄漏隐患检测:从数据标注到云上训练工程实践
|
4月前
|
人工智能 Kubernetes 安全
【重磅】 Blade AI 自主韧性测试智能体正式开源
本次阿里云峰会上发布韧性测试智能体 Blade AI:用自然语言一句话自动完成系统韧性测试全流程。
860 38
|
4月前
|
数据采集 人工智能 分布式计算
多Agent集群中的"情报官"设计:为什么系统需要一个RDD
在多Agent系统中,信息采集环节的失误往往是级联错误的根源。本文从行业实践和学术研究两个维度,论证了专职情报采集Agent的必要性,并详细解析了枢衡RDD(资源探测)的五大架构设计原则,包括与CAD的对抗性协作机制等。最后提供了一套可落地的自检清单,帮助开发者判断自己的Agent集群是否需要引入专职情报官角色。
|
4月前
|
人工智能 自然语言处理 安全
多AI聚合的五个常见误区:你以为的“交叉验证”可能只是“重复犯错”
本文剖析多AI聚合系统五大常见误区:盲目追求数量、迷信“少数服从多数”、误信数据天然独立、将分歧视为缺陷、幻想彻底消除幻觉。强调模型独立性、分歧价值与用户主动判别才是发挥聚合效能的关键。
419 5
|
1天前
|
Ubuntu Linux iOS开发
【保姆级】PowerShell下载和使用教程(所有版本汇总,2026最新实测)
PowerShell 是微软开发的跨平台命令行工具与脚本语言,支持 Windows、macOS 和 Linux。它采用“动词-名词”命名规范(如 Get-Process),功能强大:可管理系统、查询资源、批量操作、自动化运维,并支持管道、筛选、脚本编写与调试。当前主流版本为跨平台的 PowerShell 7.x(推荐 LTS 版),与系统自带的 Windows PowerShell 5.1 共存不冲突。(239 字)
|
12天前
|
缓存 JSON API
2026 年 Qwen3.7-Max 企业应用研究:作为 Agent 底座,功能亮点、成本测算与 API 对接上线教程
开发者上线业务之前,要完整理解按量计费、Token Plan订阅、NightPlan夜间折扣、上下文缓存计费规则,认清该模型能力边界,不要将多模态业务接入该模型。接入层面优先使用OpenAI兼容接口,便于对接主流开发框架;生产环境建议锁定快照版本,配置用量告警,增加异常捕获与重试逻辑。线上业务推荐分层路由策略,简单文本任务交给Flash系列处理,中等复杂度任务使用Plus,高难度纯文本任务分发到Qwen3.7‑Max,图文复杂任务使用Qwen3.8‑Max,平衡业务输出质量与推理成本。正式上线前,使用真实业务数据集完成充分测试,验证输出质量、接口延迟、Token消耗规模,确认全部业务指标达标之
100 3