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

总结:

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

本文结束!

实现线程的三种方式KLT/ULT/LWP相关推荐

  1. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  2. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

  3. 创建线程的三种方式、线程运行原理、常见方法、线程状态

    文章目录 1.创建线程的三种方式 1.1 继承Thread类并重写run方法 1.2 使用Runnable配合Thread 1.3 通过Callable和FutureTask创建线程 2.Runnab ...

  4. Java 创建一个线程的三种方式

    Java 创建一个线程的三种方式 更多内容,点击了解: https://how2j.cn/k/thread/thread-start/353.html 创建多线程有3种方式,分别是继承线程类,实现Ru ...

  5. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  6. 创建线程的三种方式及区别

    一:创建线程的三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable接口 二:创建线程的具体实现步骤: 1.继承Thread类 (1).先继承 Thread类,并且 ...

  7. java线程方法_Java线程的三种方式

    创建线程有三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future创建线程 三种方式详解如下: ---------------------------- ...

  8. windows结束线程的三种方式

    windows 结束线程有三种方式 一.让线程函数执行到 return 二.在线程函数内调用 ExitThread 三.调用 TerminateThread 其中前两种方式比较类似,它们都是通过修改某 ...

  9. Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式

    一共有以下三种方式: 1.继承Thread 2.实现Runnable 3.实现Callable,并FutureTask包装 线程启动方式均是使用start()方法 先阐述优缺点: 1和2,3: 2,3 ...

最新文章

  1. [WCF REST] 解决资源并发修改的一个有效的手段:条件更新(Conditional Update)
  2. c语言rank需要头文件吗,C++ std::rank用法及代码示例
  3. NO.7:别让异常逃离析构函数
  4. 为什么应该放弃或减少使用MD5
  5. vsftpd的基于pam_mysql的虚拟用户机制
  6. luogu P1361 小猫爬山 [iddfs]
  7. Oracle数据库配置监听的作用
  8. R语言排序 -- sort() order() rank()
  9. 预测一下web前端未来的6个趋势
  10. Corn Fields——POJ3254状态压缩Dp
  11. android 签名打包 Invalid keystore format
  12. 七月刚入职字节跳动的测试开发面试题,附答案
  13. 解决WH1000XM3连接电脑无法使用麦克风问题
  14. 女友闹别扭不用担心,python做个软件轻松哄好
  15. 云与瘦客户机 未来IT数据安全延续
  16. WEB安全性测试测试用例(基础).doc
  17. 水流强度指数(SPI)地形湿度指数(TWI)计算
  18. 倍福PLC通过程序获取控制器的温度,风扇,IP地址,型号等信息
  19. 1 表面肌电研究——端点检测(活动段检测)
  20. 豆瓣好书整理(9.5分以上)

热门文章

  1. uniapp小程序 安卓和ios时间兼容性问题解决方案
  2. 常用github开源地址
  3. Performing Code Analysis...
  4. 幻想未来,助你成为人生赢家?
  5. python爬取千图网_python爬取lol官网英雄图片代码
  6. 软件测试与质量保证-测试一
  7. html svg折线带圆角,SVG / d3.js上的矩形的一个角的圆角(svg / d3.js rounded corner
  8. window7_64安装STAF
  9. 【NCC】NCC 附件管理按钮开发,从ftp下载附件到文件服务器开发笔记
  10. html鼠标悬浮更换图片,Vue.js鼠标悬浮更换图片功能