首页 > 技术文章 > 线程的实现(操作系统层面)

yu-xia-zheng-ye 2020-09-14 16:09 原文

线程的实现方式在不同的操作系统中有不同的方式,可分为三种:内核支持线程,用户级线程,组合方式(前两种的结合)。

1.内核支持线程KST(Kernel Supported Threads)

  内核支持线程KST在内核的支持下运行,在内核空间内完成创建,阻塞,撤销,切换。每一个内核线程设置了一个线程控制块TCB,可通过TCB来感知内核线程的存在,进而加以控制。

  优点:

    1.在多处理器系统中,内核能够同时调用同一进程的多个线程并行(真正的同时执行)执行。

    2.一个进程中的线程被阻塞了,内核可以调度该进程中的其他线程或者其他进程中的线程占有处理器运行。

    3.线程切换较快,切换开销小。

    4.内核本身也可采用多线程技术,可以提高系统的执行速度和效率。(?)

  缺点:

    1.对于用户的线程的切换,需要从用户态转到内核态中进行,切换的开销较大。

2.用户级线程ULT(User Level Threads)

  用户级线程在用户空间中实现,对线程的创建,撤销,同步,通信都无需内核的支持,一个系统中用户级线程可以达到数百个至数千个。注意,用户级线程的调度是一进程为单位的,采用轮转调度算法时对于大小线程数目较少的进程来说是有利的。

  优点:

    1.线程的切换不需要转换到内存空间,因此节省了模式切换的开销

    2.调度算法是专用的,不同的进程可以有不同的调度算法

    3.用户级线程的实现与OS平台无关,因此用户级线程可以在不持之线程机制的操作系统平台上运行

  缺点:

    1.一个线程执行系统调用会阻塞该进程的所用线程

    2.单纯的用户级线程实现方式中,内核每次只分配一个CPU给进程,因此每次只能有一个线程获得CPU执行,其他线程在该线程放弃CPU之前只能等待

3.组合方式

   组合方式是内核支持线程和用户级线程的组合。根据用户级线程和内核支持线程连接方式的不同可划分出三种模型,多对一模型,一对多模型,多对多模型

  1.多对一模型:用户级线程对内核支持线程进行多路复用,一次只允许一个用户级线程映射到内核支持线程对内核进行访问,当一个线程阻塞时,其他线程也必须阻塞

  2.一对一模型:一个用户级线程映射一个内核支持线程,一个线程阻塞时,允许另一个线程调度运行。每创建一个用户级线程都需要创建一个内核支持线程与之对应,开销较大

  3.多对多模型:相同数量的用户级线程可以映射到相同数量或者更少的内核支持线程,综合了上述两种模型的优点。

 

推荐阅读