操作系统 线程的概念、属性和实现方式

前言

本文在操作系统的角度梳理下线程的概念和实现方式。
image.png

什么是线程,为什么引入线程

线程可以理解为轻量级进程。
线程是一个基本的CPU执行单元,也是程序执行的最小单位。
线程的引入进一步提高了系统的并发度,使得一个进程内也可以并发的处理各种任务。
进程是系统分配资源的基本单位,有独立的地址空间;线程是CPU调度的基本单位。

线程的属性

  • 线程是处理机调度的单位
  • 多CPU计算机中,各个线程可占用不同的CPU
  • 每个线程都有一个线程ID、线程控制块 TCB
  • 每个线程也有就绪、阻塞、运行三种基本状态
  • 线程几乎不拥有系统资源
  • 同一进程的不同线程间共享进程的资源
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
  • 同一进程中的线程切换,不会引起进程切换
  • 不同进程中的线程切换,会引起进程切换
  • 切换同进程内的线程,系统开销小
  • 切换进程,系统开销大

线程的实现方式

用户级线程

用户级线程由应用程序通过线程库实现。

  • 所有的线程管理工作都由应用程序负责,包括线程切换。
  • 用户级线程中,线程切换可以在用户态下即可完成,不用切换到核心态,无需操作系统干预。
  • 在用户看来,是有多个线程,但是在内核看来,只有一个线程。即用户级线程对用户不透明,对操作系统透明。
  • 可以这样理解,用户级线程就是从用户视角看能看到的线程。

image.png

内核级线程

内核级线程的管理工作由操作系统完成。

  • 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
  • 可以这样理解,内核级线程就是从操作系统内核视角看能看到的线程。

image.png

组合方式

在同时支持用户级线程和内核级线程的系统中,可以采用两者组合的方式,将n个用户级线程映射到m个内核级线程上n>=m。

  • 操作系统只看得见内核级线程,因此只有内核级线程才是CPU调度的基本单位。

image.png

多线程模型

在同时支持用户级线程和内核级线程的系统中,采用组合的方式将n个用户级线程映射到m个内核级线程上n>=m。由此引出了多线程模型。

多对一模型

多个用户级线程映射到一个内核级线程,即每个进程只对应一个内核级线程。

  • 优点:
    用户级线程切换在用户态,不需要切换到核心态,系统开销小,效率高;

  • 缺点
    当一个用户级线程被阻塞时,整个进程就会被阻塞,并发度不高;
    多个线程无法在多核CPU上并行运行。

一对一模型

一个用户级线程映射到一个内核级线程。每个进程有与用户线程相同梳理的内核线程。

  • 优点:
    当一个线程被阻塞后,别的线程还可以继续执行,并发度高;
    多线程可以在多核CPU上并行运行;

  • 缺点:
    一个用户进程会占用多个内核级线程,线程切换由操作系统来完成,需要切换到核心态,线程管理成本高,开销大。

多对多模型

n个用户级线程映射到m个内核级线程(n >= m)。每个用户进程对应m个内核级线程。

集前二者之所长,避二者之所短。既能高并发,又能避免系统开销大。

猜你喜欢

转载自blog.csdn.net/u014099894/article/details/112993024