摘要:的线程模型自诞生以来有三种最早的模型只部分实现标准已终止从内核以来到现在所使用的模型在中使用的用户线程与内核线程内应的线程模型这也是众多其它系统等所采用的模型模型的实现相对和要简单些当调用库创建一个线程时会调用系统调用最终会创建一个轻量级进
Linux的线程模型
自Linux诞生以来有三种
LinuxThreads, 最早的模型, 只部分实现POSIX Threads标准
NGPT, Next Generation POSIX Threads, 已终止
NPTL, Native POSIX Thread Library, 从2.6内核以来到现在所使用的模型
在NPTL中, Linux使用的用户线程与内核线程1:1内应的线程模型, 这也是众多其它系统, win32, Solaris, NetBSD, FreeBSD, macOS, iOS等所采用的模型, 1:1模型的实现相对N:1和M:N要简单些.
当调用pthread库创建一个线程时, pthread_create会调用clone系统调用, 最终会创建一个LWP(轻量级进程)和一个内核线程. NPTL的1:1模型,即1个轻量级线程对应1个内核线程. 此时该LWP在内核态有对应的task_struct(进程描述符), 是一个独立的线程调度单元
Linux的进程与线程对于系统而言并不区分进程与线程, 创建进程与创建线程都是使用fork系统调用, 只是传参上的区别, 比如子进程会有自己的独立地址空间, 而线程则会共享空间. 内核进行调度的单位是task.
可认为Linux里的线程本质上是共享资源的一系列进程.
LWP, Light-weight process, 即轻量级线程, 本质上来讲一种由内核支持的用户线程.
内核线程, 只访问内核空间, 共享相同的内核页表, 所有内核线程的内核空间是相同的, 而用户线程则是拥有自己的地址空间(与非同一进程的其它线程的空间不同).
用户线程, 标准意义上的用户线程应当是完全建立在用户空间的线程,用户线程的创建,同步,销毁,调度完全在用户空间完成,不需要内核的协助. 这个定义与LWP存在一定的交叉.
被抢占的LWP, 需要在用户态保存当前寄存器, 然后切换到内核态, 保存对应内核线程的寄存器, 恢复调度时, 分别恢复这两个现场, 涉及至少两次的栈切换和一定程度的缓存失效.
Green threads绿色线程, 由运行时库或虚拟机进行调度的"线程", 完全在用户空间进行管理.
Jdk1.2之前, 在Solaris等平台上实现的线程模型, 类型上属于绿色线程. 早期的Linux线程模型也属于绿色线程.
另外常见属于此类型的实现主要是协程, 像Java中的Quasar, Python中的Greenlet等.
协程, 是为解决非抢占式多任务处理的泛化子例程, 本质上是一种程序控制机制. 协程可以有多个入口点,可以在指定位置挂起和恢复执行.
协程分为两类
非对称式协程, 协程间有调用链关系, 有两种传递程序控制权的方式(resume/yield), 一个非对称协程可看做从属于它的调用者
对称式协程, 只有一种传递程序控制权的操作(coroutine.transfer)
Fiber"纤程", 基本上可认为是带调度器的有栈协程的实现
Java创建的线程是什么线程Java 1.2以前有些是Green threads.
1.2以后, 以Linux平台为例, 线程的创建最终是调用到pthread_create, 是内核级线程
细节在这里
参考
Light-weight process
Thread (computing)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/63691.html
摘要:由于近一年来,项目中需求新增以及迭代的量慢慢趋于平稳,平时工作中更多的是解决缺陷和,这其中涉及到很多服务器上的调试工作,故就梳理了一下平时用的比较多的命令,以供以后查阅,具体内容如下将名为的文件夹压缩成包,取名为解压列出当前目录的非隐藏 由于近一年来,项目中需求新增以及迭代的量慢慢趋于平稳,平时工作中更多的是解决缺陷和BUG,这其中涉及到很多linux服务器上的调试工作,故就梳理了一下...
摘要:如果看完本文后,还对进程线程傻傻分不清,不清楚浏览器多进程浏览器内核多线程单线程运行机制的区别。因此准备梳理这块知识点,结合已有的认知,基于网上的大量参考资料,从浏览器多进程到单线程,将引擎的运行机制系统的梳理一遍。 前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。 ----------超长文+多图预警,需要花费不少时间。---------- 如果看完本文后,还...
摘要:前言见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正。为什么要梳理这篇文章最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目。 前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正。 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目...
摘要:如问到是否使用某框架,实际是是问该框架的使用场景,有什么特点,和同类可框架对比一系列的问题。这两个方向的区分点在于工作方向的侧重点不同。 [TOC] 这是一份来自哔哩哔哩的Java面试Java面试 32个核心必考点完全解析(完) 课程预习 1.1 课程内容分为三个模块 基础模块: 技术岗位与面试 计算机基础 JVM原理 多线程 设计模式 数据结构与算法 应用模块: 常用工具集 ...
阅读 2905·2023-04-25 19:39
阅读 3670·2021-11-18 13:12
阅读 3423·2021-09-22 15:45
阅读 2230·2021-09-22 15:32
阅读 548·2021-09-04 16:40
阅读 3509·2019-08-30 14:11
阅读 1733·2019-08-30 13:46
阅读 1466·2019-08-29 15:43