线程基础
为什么要引入线程?增加并发度!
线程是轻量级的进程,创建新线程的时候不需要重新分配资源和切换进程环境,因此大大减少了并发的开销,增加了并发的灵活度
线程的属性
- 处理机调度单位
- 线程可占据不同的CPU
- 线程有自己的ID和TCB(线程控制块)
- 也有三种基本状态
- 几乎不占用系统资源
- 同一进程下共享进程资源
- 由于共享资源,因此线程间通信比进程间通信更简单,基本上无需操作系统干预(如提供原语等)
- 非跨进程间的线程切换,不会引起进程切换
- 同进程切换系统开销极小
线程的实现方式
- 用户级线程: 应用程序通过进程库实现,所有线程工作(创建,切换,销毁)都由应用程序负责,操作系统无法感知
- 内核级线程: 由OS内核完成,调度切换等由OS完成,因此内核级的切换在核心态下实现
- 组合: n个用户线程映射到m个内核线程,n>=m,但实际上内核线程才是实际的系统处理单位
多线程模型
- 多对一模型: 多个用户线程映射到一个内核线程,用户线程的切换成本低(在用户空间即可完成),效率高,但是一个用户线程阻塞,整个进程都会被阻塞,并发度低
- 一对一模型: 每个用户线程映射到一个内核线程,用户线程的切换成本高(在内核空间完成),效率低,但是一个用户线程阻塞,其他用户线程不受影响
- 多对多模型: 好,但实现复杂