【Linux】线程概念
📝前言:
这篇文章我们来讲讲Linux——线程概念:
- 线程的基本概念
- 线程的优缺点
- 线程与进程
🎬个人简介:努力学习ing
📋个人专栏:Linux
🎀CSDN主页 愚润求学
🌄其他专栏:C++学习笔记,C语言入门基础,python入门基础,C++刷题专栏
这里写目录标题
- 📝前言:
- 一,线程的基本概念
- 1. 基本概念
- 2. 资源划分
- 3. 线程资源划分与共享
- 二,线程的优缺点
- 1. 优点
- 2. 缺点
- 3. 线程的异常
- 4. 线程的用途
- 三,线程与进程
- 1. 进程和线程
- 2. 进程的多个线程共享
一,线程的基本概念
1. 基本概念
- 进程:进程 == 内核数据结构 + 代码和数据
- 进程是承担分配系统资源的基本实体
- 线程:进程内部的一个执行分支
- 在Linux下,线程就是轻量级的进程(但Windows不是,Windows有自己的实现方案)
- 线程是CPU调度的基本单位(因为Linux下,线程是用进程模拟的,所以CPU的调度策略都可以用进程那一套!)
- 线程这个说法是操作系统提供的(属于用户视角,但是对于Linux底层,线程就是轻量级进程)
2. 资源划分
- 创建一个进程:我们要创建
task_struct
,进程地址空间
,页表
… - 但是对于一个线程,我们只需要创建
task_struct
+ 资源划分- 对资源的划分,本质是对进程地址空间的划分(虚拟地址,就是资源的代表)
- 一个执行流有多少资源,本质上就是:在合法的的情况下,拥有的虚拟地址
- 而函数天然就是代码和数据的集合,所以我们通常让线程执行进程中不同的函数(把函数分给线程,就完成了资源的划分)
- 多个线程的
task_struct
指向同一个进程的进程地址空间
- 进程强调独占,部分资源共享(比如通信的时候)
- 线程强调共享(因为线程都在同一个进程内),部分资源独占
- 资源的划分和共享本质是对虚拟地址的划分和共享
3. 线程资源划分与共享
- 线程进行资源划分:本质是划分地址空间,获得一定范围的合法虚拟地址。再本质:就是在划分页表
- 线程进行资源共享:本质是对地址空间的共享,再本质:就是对页表条目的共享
二,线程的优缺点
以下优缺点是相较于进程的。
1. 优点
- 创建⼀个新线程的代价要比创建⼀个新进程小得多
- 切换方面,线程切换的代价也要更小
- 切进程:要切硬件上下文,要切CR3的页目录…
- 切线程:地址空间还是一样的,只用切
task_struct
,CR3也不用切… - 还有:进程缓存机制
Cache
和TLB
- 当硬件上下文切换的时候会扰乱进程的缓存机制,对于进程,因为直接换了,所以
Cache
和TLB
的内容都无效了。但是对于线程,还在同一个进程内,Cache
和TLB
的失效面积小。
- 线程占用的资源要比进程少很
- 能充分利用多处理器的可并行数量
- 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
- 计算密集型应用,为了能在多处理器系统上运⾏,将计算分解到多个线程中实现
- I/O密集型应⽤,为了提⾼性能,将I/O操作重叠。线程可以同时等待不同的I/O操作
2. 缺点
但是代码写的好,处理的好,都没有下面的问题
- 性能损失
- 当线程用于计算密集型,则线程数量不要大于CPU的数量。因为,计算密集型的线程往往没办法和其他线程共用CPU。如果太多线程,增加了额外的同步和调度开销(比如切线程上)
- 健壮性降低
- 不小心给一个线程共享了不属于它的东西,然后还被修改了,就会有问题
- 线程如果有错(异常),会直接影响整个进程
- 缺乏访问控制
- 进程是访问控制的基本粒度,在⼀个线程中调⽤某些OS函数会对整个进程造成影响
- 代码编写更难
3. 线程的异常
- 单个线程崩溃,导致整个进程崩溃,其他线程也退出
4. 线程的用途
- 提高CPU密集型程序的执行效率
- 提高IO密集型程序的用户体验
三,线程与进程
1. 进程和线程
- 进程是资源分配的基本单位
- 线程是调度的基本单位
- 线程共享进程数据,但也拥有⾃⼰的⼀部分数据:
- 线程ID
- ⼀组寄存器,存放线程上下文数据
- 独立的栈结构
- errno
- 信号屏蔽字
- 调度优先级
2. 进程的多个线程共享
同⼀地址空间,因此Text Segment、Data Segment都是共享的,如果定义⼀个函数,在各线程中都可以调用,如果定义⼀个全局变量,在各线程中都可以访问到。
除此之外,各线程还共享以下进程资源和环境:
- 文件描述符表
- 每种信号的处理方式(SIG_ IGN、SIG_ DFL或者自定义的信号处理函数)
- 当前工作目录
- 用户id和组id
线程和进程的关系:
🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!