实现线程的三种方式KLT/ULT/LWP

本文介绍了线程的三种实现方式:内核线程(KLT)、用户线程(ULT)和用户线程加轻量级进程混合。KLT由内核支持,LWP作为其高级接口,两者1:1对应,但创建和同步需系统调用。ULT完全在用户态,不需内核支持,但处理阻塞和多处理器映射复杂。混合模式结合两者优点,用户线程快速创建,LWP桥接内核线程调度。
摘要由CSDN通过智能技术生成

大家好,我是神韵,是一个技术&生活博主。关于文章都是定位为基础,我不敢讲的太深入,因为我怕自己没时间。欢迎来点赞打卡,你们的行动将是我无限的动力。
今日主题是:实现线程的三种方式KLT/LWP/ULT

  三种线程的实现主要是内核线程(KLT)用户线程(ULT)用户线程加轻量级进程混合,其中轻量级进程又称LWP。

1、内核线程实现

  内核线程(Kernal-Level Thread)简称KLT,这种线程实现是指直接由操作系统内核来完成线程支持、线程切换和操纵调度器进行调度即线程映射到各个处理器
  但是,程序一般不会直接去使用内核线程,而是通过去使用内核线程的一种高级接口叫轻量级进程(Light Weight Process)去操作内核线程(官方定义名称,在大多数系统中,LWP与普通进程的区别也在于它只有一个最小的执行上下文和调度程序所需的统计信息,而这也是它之所以被称为轻量级的原因)。并且它们之间的关系是1:1存在。需要注意的是只有先支持内核线程,才能有轻量级进程。

优势:因为有轻量级进程与内核线程的1:1方式支持,轻量级进程属于一个独立调度单元,就算阻塞也不会响应整个系统工作。
劣势:线程的创建、析构及同步都要进行系统调用,需要在用户态(User Mode)和内核态(Kernel Mode)中来回切换。由于1:1方式支持,所以需要消耗内核资源(内核线程的栈空间)。
  下面是它们之间的关系图(进程P通过轻量级进程LWP调用内核KLT,内核线程通过调度器Thread Scheduler调度将任务映射到相应的CPU上)
在这里插入图片描述

2、用户线程实现

  用户线程是指完成建立在用户空间的线程库上(十分复杂的库),用户线程池的建立、同步、销毁和调度完全在用户态中完成,系统内核不能感知用户线程的存在,也不需要内核的帮助,这种线程不需要切换到内核态,操作非常快速且低消耗。

优势:不需要系统内核支持,所有操作在用户态完成。不需要消耗用户态(User Mode)和内核态(Kernel Mode)中来回切换的资源及内核资源。
劣势:需要一个复杂的线程库去支持用户线程的各种操作(创建、切换调度等),对于阻塞处理、多处理器如何映射到其他处理器这类问题上解决起来困难甚至不能完成。

进程P与用户线程1:N的关系图(CPU分配到程序P,由程序P完成用户线程调度,分配资源)
在这里插入图片描述

3、用户线程加轻量级进程混合实现

  在这种混合模式下,即存在用户线程也存在轻量级进程。用户线程完全建立在用户态空间上,完成对用户线程的创建、切换析构等操作,并且大规模支持并发。并且操作系统支持通过轻量级进程来作为用户线程和内核线程之间的桥梁,这样可以使用内核提供的线程调度功能及处理器映射(这个是用户线程基本不可能完成的操作)。

优势:拥有用户线程,对线程创建、切换等操作低消耗。通过轻量级线程去调用内核线程,大大降低进程被完全阻塞的风险。
劣势:线程调度及处理器需要内核支持,涉及用户态和内核切换的操作。

下面是用户线程与轻量级进程N:M的关系图:

在这里插入图片描述

总结:

  内核线程是依赖操作系统内核实现,用户线程是完全由自己实现,用户线程加轻量级进程混合是将内核与用户线程一起实现。

本文结束!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值