操作系统-线程

  • Post author:
  • Post category:其他




操作系统-线程



线程



概念

  • 引入进程是为了多道程序并发执行,引入线程则为了减小程序并发执行的开销,提高并发性能
  • 线程又称为

    轻量级进程

    ,是基本的CPU执行单元,也是程序执行流的最小单元; 是进程中的一个实体,是被系统独立调度和分配的基本单位
  • 线程由**线程ID,程序计数器,寄存器集合和堆栈组成
  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行
  • 线程也有

    就绪,阻塞,运行




属性

  • 线程是轻型实体,不拥有系统资源,但每个线程具有

    唯一的标识符和线程控制块

    ; 线程控制块记录

    线程执行的寄存器和栈等线程状态
  • 不同的线程可以执行相同的程序; 即同一个服务程序被不同用户调用时,操作系统把它们创建成不同的线程
  • 线程不拥有系统资源,只拥有运行必不可少的一点资源; 与同属一个进程的其他线程共享进程中的资源
  • 单CPU系统中,各线程交替占用CPU; 多CPU系统中,各线程占用不同的CPU,若各个CPU同时为一个进程中各个线程服务,可缩短处理时间



与进程比较

  • 引入线程之后,

    线程是独立调度的基本单位,进程是拥有资源的基本单位
  • 线程不拥有资源,但线程可以访问其隶属进程的系统资源
  • 引入线程的操作系统,不仅进程可以并发执行,线程也可以,使得操作系统有更好的并发性
  • 创建和撤销进程时,系统为之分配或回收资源等付出的开销远大于创建和撤销线程; 进程切换涉及执行进程CPU环境的保存和新调度到进程CPU环境的设置,而线程切换只需要保存和设置少量寄存器的内容,开销很小
  • 进程间通信(IPC)需要经常同步和互斥手段辅助,以保证数据一致性,而线程间可以直接读写进程数据段进行通信



线程的实现

  • 用户级线程(User-Level Thread ULT)

    • 线程管理的所有工作都由

      应用程序

      完成,内核意识不到线程存在
    • 应用程序可以通过使用线程库设计成多线程程序
  • 内核级线程(Kernel-Level Thread KLT)

    • 线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码
    • 内核为进程及其内部的每个线程维护上下文信息,调度也在内核基于线程架构的基础上完成

avator




多线程模型

  • 多对一模型

    • 多个用户级线程映射到一个内核级线程

      • 优点: 线程管理在用户空间完成,因此效率比较高
      • 缺点: 若一个线程在使用内核服务时被阻塞,整个进程都会被阻塞; 多个线程不能并行运行在处理器上
  • 一对一模型

    • 一个用户级线程映射到一个内核级线程

      • 优点: 运行并发执行,一个线程阻塞,运行另一个进程执行
      • 缺点: 每创建一个用户级线程都要创建一个内核级线程,开销大,影响性能
  • 多对多模型

    • n个用户级线程映射到m个内核级线程 m<=n

      • 是上两个模型的折中,既克服了多对一模型的并发度不高,又克服了一对一模型开销大的缺点,还拥有各自的优点



版权声明:本文为zzxb_coder原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。