Skip to content

线程基础

为什么要引入线程?增加并发度!

线程是轻量级的进程,创建新线程的时候不需要重新分配资源和切换进程环境,因此大大减少了并发的开销,增加了并发的灵活度

线程的属性

  • 处理机调度单位
  • 线程可占据不同的CPU
  • 线程有自己的ID和TCB(线程控制块)
  • 也有三种基本状态
  • 几乎不占用系统资源
  • 同一进程下共享进程资源
  • 由于共享资源,因此线程间通信比进程间通信更简单,基本上无需操作系统干预(如提供原语等)
  • 非跨进程间的线程切换,不会引起进程切换
  • 同进程切换系统开销极小

线程的实现方式

  • 用户级线程: 应用程序通过进程库实现,所有线程工作(创建,切换,销毁)都由应用程序负责,操作系统无法感知
  • 内核级线程: 由OS内核完成,调度切换等由OS完成,因此内核级的切换在核心态下实现
  • 组合: n个用户线程映射到m个内核线程,n>=m,但实际上内核线程才是实际的系统处理单位

多线程模型

  • 多对一模型: 多个用户线程映射到一个内核线程,用户线程的切换成本低(在用户空间即可完成),效率高,但是一个用户线程阻塞,整个进程都会被阻塞,并发度低
  • 一对一模型: 每个用户线程映射到一个内核线程,用户线程的切换成本高(在内核空间完成),效率低,但是一个用户线程阻塞,其他用户线程不受影响
  • 多对多模型: 好,但实现复杂