内核级线程(KLT)和用户级线程(ULT)
文章目录
- 进程和线程
- 内核级线程(Kemel-Level Threads, KLT 也有叫做内核支持的线程)
- 纯内核级线程特点
- 用户级线程(User-Level Threads ULT)
- 纯用户级线程的特点
- 线程实现的组合策略
- 组合策略
- 联系
- java线程与系统内核线程关系
进程和线程
首先说一下线程对于进程的优势,这其实就是线程出现的意义。
进程是资源拥有的基本单位,进程切换需要保存进程状态,会造成资源的消耗。同一进程中的线程,共享进程获取的部分资源。在同一进程中,线程的切换不会引起进程切换,线程的切换需要的资源少于进程切换,可以提高效率。
内核级线程(Kemel-Level Threads, KLT 也有叫做内核支持的线程)
- 线程管理的所有工作(创建和撤销)由操作系统内核完成
- 操作系统内核提供一个应用程序设计接口API,供开发者使用KLT
纯内核级线程特点
1.进程中的一个线程被阻塞,内核能调度同一进程的其他线程(就绪态)占有处理器运行
2.多处理器环境中,内核能同时调度同一进程的多线程,将这些线程映射到不同的处理器核心上,提高进程的执行效率。
3.应用程序线程在用户态运行,线程调度和管理在内核实现。线程调度时,控制权从一个线程改变到另一线程,需要模式切换,系统开销较大。
用户级线程(User-Level Threads ULT)
- 用户空间运行线程库,任何应用程序都可以通过使用线程库被设计成多线程程序。线程库是用于用户级线程管理的一个例程包,它提供多线程应用程序的开发和运行支撑环境,包含:用于创建和销毁线程的代码、在线程间传递数据和消息的代码、调度线程执行的代码以及保存和恢复线程上下文的代码。
- 所以线程的创建,消息传递,调度,保存/恢复上下文都有线程库来完成。内核感知不到多线程的存在。内核继续以进程为调度单位,并且给该进程指定一个执行状态(就绪、运行、阻塞等)。
纯用户级线程的特点
1.线程切换不需要内核模式,能节省模式切换开销和内核资源。
2.允许进程按照特定的需要选择不同的调度算法来调度线程。调度算法需要自己实现。
3.由于其不需要内核进行支持,所以可以跨OS运行。
4.不能利用多核处理器优点,OS调度进程,每个进程仅有一个ULT能执行
5.一个ULT阻塞,将导致整个进程的阻塞。
jacketing技术可以解决ULT一个线程阻塞导致整个进程阻塞。
jacketing的目标是把一个产生阻塞的系统调用转化成一个非阻塞的系统调用。例如,当进程中的一个线程调用IO中断钱,先调用一个应用级的I/O jacket例程,而不是直接调用一个系统I/O。让这个jacket例程检查并确定I/O设备是否忙。如果忙,则jacketing将控制权交给该进程的线程调度程序,决定该线程进入阻塞状态并将控制权传送给另一个线程(若无就绪态线程咋可能执行进程切换)。
线程实现的组合策略
可以看出,用户级线程和内核级线程都有各自的优点和缺点,在应用上主要表现为:
- 用户级多线程对于处理逻辑并行性问题有很好的效果。不擅长于解决物理并发问题。
- 内核级多线程适用于解决物理并行性问题。
组合策略
由操作系统内核支持内核级多线程,由操作系统的程序库来支持用户级多线程,线程创建完全在用户空间创建,现成的调度也在应用程序内部进行,然后把用户级多线程映射到(或者说是绑定到)一些内核级多线程。编程人员可以针对不同的应用特点调节内核级线程的数目来达到物理并行性和逻辑并行性的最佳方案。
附上三种线程模式的图,帮助理解
联系
用户空间创建线程,需要切换到内核空间。
java线程与系统内核线程关系
Java线程创建(new Thread)依赖于系统内核,通过JVM调用系统库(Linux的P-Thread)创建内核线程,内核线程与java 线程是1:1 映射关系。
为什么用线程池?
1.cpu核心有限
2.线程栈占用空间资源
参考:
https://blog.csdn.net/vinter_he/article/details/79788743 (内核级线程(KLT)和用户级线程(ULT))
内核级线程(KLT)和用户级线程(ULT)相关推荐
- 应用退出前不让线程切换_用户级线程和内核级线程,你分清楚了吗?
前天晚上有个伙伴私信我说在学进程和线程,问我有没有好的方法和学习教程,刚好我最近也在备相关的课. 班上不少学生学的还是很不错的.拿班上小白和小明的例子吧(艺名哈).小明接受能力很强,小白则稍差些. 关 ...
- golang goroutine协程概念及入门:轻量级线程(或用户态线程)
import ("strconv""time""fmt" )
- Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程
一.定义 再看正文之前我要先强调一下几点: 1. Linux中没有真正的线程,但windows中确实有线程 2. Linux中没有的线程是由进程来模拟实现的(又称作:轻量级进程) 3. 所以在Linu ...
- OS / 线程的 3 种实现方式(内核级,用户级 和 混合型)
1 .线程的 3 种实现方式 在传统的操作系统中,拥有资源和独立调度的基本单位都是进程.在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位.在同一进程中,线程的切换不会引起进程 ...
- 操作系统——用户级线程和内核级线程(L10,L11,L12)
用户级线程: 不同的进程的映射表不同,当一个进程中断了,我们需要切换到另外一个线程,就需要我们切换指令执行序列,切换与设备等各种资源,这样的效率是很低的 线程保留了并发的特点,又避免了进程切换的代价. ...
- 用户态和内核态:用户态线程和内核态线程有什么区别?
转载 文章来源于 拉钩教育 重学操作系统 林䭽 用户态和内核态:用户态线程和内核态线程有什么区别? 什么是用户态和内核态 Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有 ...
- MetaSelector:基于用户级自适应模型选择的元学习推荐
文章目录 前言 Abstract Background 什么叫元学习? 元学习与机器学习的区别 元学习数据分布 推荐系统 Contributions: Method MetaSelector fram ...
- java线程提交_从Java线程到线程池
线程模型 线程模型分为两类,用户级线程(ULT)和内核级线程(KLT) 用户级线程(ULT):user level threads,系统内核对ULT无感知,线程的创建和调度都由用户级APP进程管理:即 ...
- linux线程详解:线程概念、线程调度、线程安全、线程模型
1.线程与进程的区别 (1)线程是轻量级的进程,是程序执行流的最小单位: (2)进程是资源分配的最小单位,线程是调度的最小单位: (3)进程可以创建线程,线程不可以创建进程: (4)一个进程由一个或者 ...
最新文章
- 【Qt】QImage使用总结
- 微信公众号开发之准备工作
- Python入门:常用模块—logging模块
- 03 ORA系列:ORA-00942 表或视图不存在 table or view does not exist
- Lambda表达式详解【一】
- Chapter7-4_來自獵人暗黑大陸的模型 GPT-3
- 2017 JavaScript 调查报告概述
- 08TensorFlow2.0基础--8.4部分采样
- 021.4 IO流——字节、字符桥梁(编码解码)
- 光绪变法为什么没成功
- Python 3.8.7安装教程
- abb机器人焊接编程视频教程_【ABB】ABB机器人焊接指令介绍,内附视频
- 标准差σ未知_标准差σ的4种计算公式
- QLineEdit文件名正则表达式
- 北师18秋计算机在线作业考核,北师18秋《大学英语(三)》在线考核答案
- 网络安全关于Windows下BAT脚本使用
- .NET中LinkButton的使用
- @Validated和@Valid的使用
- zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH
- 如何验证JDK和JRE安装成功