资讯专栏INFORMATION COLUMN

Linux进程/线程的相关概念梳理

phoenixsky / 2765人阅读

摘要:的线程模型自诞生以来有三种最早的模型只部分实现标准已终止从内核以来到现在所使用的模型在中使用的用户线程与内核线程内应的线程模型这也是众多其它系统等所采用的模型模型的实现相对和要简单些当调用库创建一个线程时会调用系统调用最终会创建一个轻量级进

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/用户线程/内核线程

LWP, Light-weight process, 即轻量级线程, 本质上来讲一种由内核支持的用户线程.
内核线程, 只访问内核空间, 共享相同的内核页表, 所有内核线程的内核空间是相同的, 而用户线程则是拥有自己的地址空间(与非同一进程的其它线程的空间不同).
用户线程, 标准意义上的用户线程应当是完全建立在用户空间的线程,用户线程的创建,同步,销毁,调度完全在用户空间完成,不需要内核的协助. 这个定义与LWP存在一定的交叉.

上下文切换

被抢占的LWP, 需要在用户态保存当前寄存器, 然后切换到内核态, 保存对应内核线程的寄存器, 恢复调度时, 分别恢复这两个现场, 涉及至少两次的栈切换和一定程度的缓存失效.

Green threads

绿色线程, 由运行时库或虚拟机进行调度的"线程", 完全在用户空间进行管理.
Jdk1.2之前, 在Solaris等平台上实现的线程模型, 类型上属于绿色线程. 早期的Linux线程模型也属于绿色线程.
另外常见属于此类型的实现主要是协程, 像Java中的Quasar, Python中的Greenlet等.

Coroutine

协程, 是为解决非抢占式多任务处理的泛化子例程, 本质上是一种程序控制机制. 协程可以有多个入口点,可以在指定位置挂起和恢复执行.
协程分为两类

非对称式协程, 协程间有调用链关系, 有两种传递程序控制权的方式(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

相关文章

  • 工作中常用linux命令梳理

    摘要:由于近一年来,项目中需求新增以及迭代的量慢慢趋于平稳,平时工作中更多的是解决缺陷和,这其中涉及到很多服务器上的调试工作,故就梳理了一下平时用的比较多的命令,以供以后查阅,具体内容如下将名为的文件夹压缩成包,取名为解压列出当前目录的非隐藏 由于近一年来,项目中需求新增以及迭代的量慢慢趋于平稳,平时工作中更多的是解决缺陷和BUG,这其中涉及到很多linux服务器上的调试工作,故就梳理了一下...

    fai1017 评论0 收藏0
  • 从浏览器多进程到JS单线程,JS运行机制最全面一次梳理

    摘要:如果看完本文后,还对进程线程傻傻分不清,不清楚浏览器多进程浏览器内核多线程单线程运行机制的区别。因此准备梳理这块知识点,结合已有的认知,基于网上的大量参考资料,从浏览器多进程到单线程,将引擎的运行机制系统的梳理一遍。 前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。 ----------超长文+多图预警,需要花费不少时间。---------- 如果看完本文后,还...

    wanghui 评论0 收藏0
  • 从输入URL到页面加载过程?如何由一道题完善自己前端知识体系!

    摘要:前言见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正。为什么要梳理这篇文章最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目。 前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正。 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目...

    kel 评论0 收藏0
  • 进程线程

    摘要:概念在学习操作系统的过程中,进程线程概念其实很模糊。该段落拓展阅读虚拟地址空间布局文件描述符简介多线程信号总结对进程和线程的实现内核只有一个结构体来描述进程线程,该文件位于。 概念 在学习操作系统的过程中,进程、线程概念其实很模糊。不同的上下文中,该名称指代的概念很可能是不同的,概念的不清晰为学习和沟通带来障碍,所以,在最开始我们先对齐概念。 很多书籍、文章里会这样来定义进程和线程: ...

    lordharrd 评论0 收藏0
  • Java面试 32个核心必考点完全解析

    摘要:如问到是否使用某框架,实际是是问该框架的使用场景,有什么特点,和同类可框架对比一系列的问题。这两个方向的区分点在于工作方向的侧重点不同。 [TOC] 这是一份来自哔哩哔哩的Java面试Java面试 32个核心必考点完全解析(完) 课程预习 1.1 课程内容分为三个模块 基础模块: 技术岗位与面试 计算机基础 JVM原理 多线程 设计模式 数据结构与算法 应用模块: 常用工具集 ...

    JiaXinYi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<