接前一篇文章:Linux内核进程管理子系统有什么第一回 —— 引言与基础知识
本文内容参考:
Linux内核进程管理专题报告_linux rseq-CSDN博客
《趣谈Linux操作系统 核心原理篇:第三部分 进程管理》—— 刘超
《图解Linux内核 基于6.x》 —— 姜亚华 机械工业出版社
特此致谢!
上一回讲了进程的概念、特征等基本知识,本回讲解线程的相关知识。
2. 线程
(1)什么是线程
执行线程(thread of execution),简称线程(thread),是在进程中活动的对象。每个线程都拥有一个独立的程序计数器、线程栈和一组进程寄存器。内核调度的对象是线程,而不是进程。在传统的Unix系统中,一个进程只包含一个线程。但现在的系统中,包含多个线程的多线程程序司空见惯。Linux系统对线程和进程并不作特别区分,对于Linux而言,线程只不过是一种特殊的进程罢了。
(2)为什么要有线程
实际上,对于任何一个进程来讲,即便没有主动创建线程,进程也是默认有一个主线程的。线程是负责执行二进制指令的,而进程要比线程管的宽多了,除了执行指令之外,内存、文件系统等等都要它来管理。
(3)进程与线程的区别
进程是操作系统资源分配的基本单位,拥有独立的内存空间;线程是CPU调度的基本单位,共享进程资源,两者在资源开销、通信方式和稳定性上有显著差异。
具体来说:
- 进程是操作系统分配资源(如内存、文件描述符等)的基本单位,每个进程拥有独立的地址空间。;线程共享所属进程的资源(如堆、全局变量),仅需独立保存栈和寄存器状态,因此创建和切换开销更小。
- 线程是CPU调度的基本单位,同一进程的多个线程可并发执行,而进程是程序运行的实例。
两者详细对比:
1) 资源与隔离性
- 进程:独立内存空间确保高隔离性,一个进程崩溃不影响其它进程,但资源占用大。
- 线程:共享内存导致低隔离性,线程错误可能引发整个进程崩溃,但通信效率高。
2)创建与切换开销
- 进程:创建需分配独立资源,上下文切换涉及内存管理单元(如页表),开销较大。
- 线程:仅需保存线程栈和寄存器状态,切换速度快,适合高并发场景。
3)通信机制
- 进程间通信(IPC):需通过管道、消息队列等机制,复杂度高。
- 线程间通信:直接共享内存变量,但需同步机制(如互斥锁)避免竞态条件。
4)应用场景
- 多进程:适用于需高稳定性或隔离的任务(如服务器进程隔离)。
- 多线程:适用于需高效资源共享的任务(如GUI应用或高并发请求处理)。
举一个例子作为类比以便于理解:
- 如果将一个进程比作一个公司,那么线程则好比一个公司内的不同部门(或项目组);
- 如果将一个进程比作一个公司内的某个部门(或项目组),那么线程则是该部门(或项目组)内部的小组(或个人)。
关于线程的相关基础知识就暂时讲到这里,后文书还会对线程更深层次的知识进行讲解。