[toc]
3.1 概念#
- 是基本的CPU执行单元
- 是程序执行流的最小胆小
- 被系统调度和分配的基本单位
3.1.1 目的#
- 提高系统性能
- 减小程序并发执行时的时空开销
3.1.2 组成#
- 线程id
- 程序计数器PC
- 寄存器集合
- 堆栈
3.1.3 实现方式#
一般会有2种线程:
- 用户级线程ULT: 创建发生在用户空间
- 系统级线程KLT: 完成系统内所有线程的管理,提供给用户一定的线程管理接口。
ULT和KLT的映射关系分类(即用户线程能给哪些系统线程管理):
- 多用户线程对应1个系统线程。 即所有线程公用一个线程管理接口
这样如果一旦阻塞就全部阻塞 - 一对一: 每个用户线程单独使用1个系统线程做管理
这样会导致系统线程过多,开销大 - 多对多: n个用户线程对应m个内核线程(n>=m)
这个比较好
linux用的是哪种呢?
3.2 进程和线程的区别#
- 从调度上看
线程是CPU调度的最小单位
进程是拥有资源的基本单位 - 切换
同一进程内的线程之间切换,不用引起进程切换
从a进程的线程跳到b进程的线程,需要引起进程切换 - 资源
线程只独立拥有一点点小资源(线程栈、共享虚拟地址空间)
进程则拥有很多 - 通信: 线程可通过读写进程的全局变量来通信,但是进程之间通信则无法依赖变量。
- 开销
线程的系统/时空开销少 - 并发
进程和线程都支持并发。
是否支持并行要看CPU情况。
Q: 并发和并行有什么区别呢?#
A:
- 并发指 在某一个时间段内跑多个任务, 这些任务可能抢占同一个CPU资源, ”存在交替执行“
- 并行指 同一时刻,有多个任务同时在跑, 即分别占用不同的CPU跑任务。