当前位置: 首页 > news >正文

Linux 内核:线程的实现

在linux中的线程是轻量级线程(Light-Weight-process,LWP)

文章目录

  • 线程概念
  • 线程实现
  • 线程拓展

线程概念

线程分类

  • 用户级线程
  • 内核级线程,没有用户空间,完全工作在内核中(下图中没有[]的就是用户级线程)

在这里插入图片描述

Linux线程特点

  • Linux内核不区分进程和线程,PCB和TCB本质都是task_struct实例
  • task_struct包含pid和tgid,无论进程还是线程它们的pid都是独一无二的
  • 一个进程包含一个线程组,线程组号=进程的pid=所有线程的tgid(包括主线程)
  • 我们使用ps和getpid方法获取的pid其实就是tgid

对下图用户看到的PID其实就是pgid,而LWP其实是pid
在这里插入图片描述
pid用于调度,pgid用于资源管理

线程实现

创建进程我们使用fork,创建线程的时候可以使用new thread,逻辑层的变化大概如下
在这里插入图片描述
下面分析物理层的变化
看下函数的调用关系,kernel_thread是创建内核级线程的函数,它们的底层都是通过调用clone函数来实现功能的,区别是flag参数传的不太,下面看下clone函数的函数签名
int clone(int (*fn)(void *), void *stack, int flags, void *arg, ... /* pid_t *parent_tid, void *tls, pid_t *child_tid */ );

在这里插入图片描述
我挑了几个flag介绍一下,别的你可以执行:man clone自个看

  • CLONE_VM:标志在进程间共享地址空间,虚拟内存
  • CLONE_FS:标志进程间共享文件系统信息
  • CLONE_FILES:标志在进程间共享打开的文件
  • CLONE_SIGHAND:标志在进程间共享信号处理程序

创建进程时上述几个都不设置,创建线程时上述都设置,所以说创建线程的时候流程其实和进程是一样的,只不过共享的资源不同,所以说本质上来说内核不区分什么进程/线程,都会当作进程处理。
说到这里了不知道你有没有意识到,进程和线程就好像文件系统中的硬链接文件一样,其实相同的逻辑也可以带到C++中的shared_ptr智能指针,这些逻辑都是类似的,线程对进程资源维持一个计数,当计数为0时释放进程

注意:这些资源都是借助指针指向的如果需要共享的话只需要浅拷贝,主线程和其它线程的区别只有运行开始的时候起始位置不同

线程拓展

线程是作为栈帧存在于进程的栈中的,对一块内存它的栈指针和代码区运行位置的指针是唯一的,线程上下文切换的过程中会保存/恢复这两个指针的位置从而让线程觉得自己可以像进程一样工作,

线程模型

  • 多对一模型(用户级线程),现在不用了,就是在用户态维持线程的TCB,因此在内核态他会认为这是多线程是一个进程,简单间理解的话就是用户模拟多线程自己调度,这个东西有点像协程,好处是调度灵活,上下文切换小。
    问题:
    • 一个线程阻塞,所有线程阻塞
    • 在多核系统中,多线程无法并行
    • 只有一个内核线程在内核中
  • 一对一模型(内核级线程),TCB由内核去管理,真正将线程暴露在内核中,使得并发性更好可以充分的利用多核CPU的资源(windows/linux/…主流操作系统采用这种模型)
    问题:
    • 系统开销大,调度压力增大,调度自由度低
    • 上下文切换变大

注意:内核级线程和内核线程是两个东西,内核级强调这种模式下的每一个线程由内核直接调度/控制,内核线程是内核为了满足操作系统并发性而独立维护的线程

参考:
【Linux系列】深入理解task_struct结构体

相关文章:

Linux 内核:线程的实现

在linux中的线程是轻量级线程(Light-Weight-process,LWP) 文章目录 线程概念线程实现线程拓展 线程概念 线程分类 用户级线程内核级线程,没有用户空间,完全工作在内核中(下图中没有[]的就是用户级线程&am…...

SonarQube 9.9.4 LTS社区版安装

目标 安装个SonarQube社区版. 安装SonarQube9.9.4 LTS社区版 https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.4.87374.zip # 切换到安装目录 cd /opt # 下载安装包 sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube…...

Laravel 11入门:使用ServBay打造高效开发环境

Laravel 11发布,改进了不少功能。 它引入了更加流畅的应用结构、每秒限速、健康路由等特性。 此外,Laravel还推出了第一方可扩展的WebSocket服务器Laravel Reverb,为你的应用提供强大的实时功能。 在今天的指南中,我将设置一个…...

Flink WordCount实践

目录 前提条件 基本准备 批处理API实现WordCount 流处理API实现WordCount 数据源是文件 数据源是socket文本流 打包 提交到集群运行 命令行提交作业 Web UI提交作业 上传代码到gitee 前提条件 Windows安装好jdk8、Maven3、IDEA Linux安装好Flink集群,可…...

时间序列分析 # 平稳性检验和ARMA模型的识别与定阶 #R语言

掌握单位根检验的原理并能解读结果;掌握利用序列的自相关图和偏自相关图识别模型并进行初步定阶。 原始数据在文末!!! 练习1、根据某1971年9月-1993年6月澳大利亚季度常住人口变动(单位:千人)的…...

算法-日期问题

算法-日期问题 1.判断是否闰年 int is_leap(int y) {if((y%4000)||(y%40&&y%100!0)){return 1;}return 0; }2.每个月的天数 const int months[]{0,31,28,31,30,31,30,31,31,30,31,30,31};3.计算当前年当前月的天数 int get_month_days(int year,int month) {int re…...

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.5 年末操作:维护新财政年度会计凭证编号范围

2.6.5 年末操作:维护新财政年度会计凭证编号范围 财务系统的维护者要在每年年末预先设置好下一年度的会计凭证编号范围(number range),以便下一年度会计凭证能够顺利生成。这一操作一定要在下一年度1月1日以前预先完成。 …...

2024年第十七届“认证杯”数学中国数学建模网络挑战赛A题思路

A题 保暖纤维的保暖能力 冬装最重要的作用是保暖,也就是阻挡温暖的人体与寒冷环境之间的热量传递。人们在不同款式的棉衣中会填充保暖材料,从古已有之的棉花,羽绒到近年来各种各样的人造纤维。不同的保暖纤维具有不同的保暖性能,比如人们以往的经验表明,高品质的羽绒具有…...

Linux 添加启动服务--Service

1,服务配置service文件 Service 服务的实际作用是开启后自动启动服务,运行一些不须要登录的程序,任务。 实例1、上电自动连接WIFI热点 1.1 新建.service文件 /etc/systemd/system/wificonnect.service [Unit] DescriptionService [wifico…...

构建智能连接的未来:物联网平台系统架构解析

随着科技的不断进步和互联网的普及,物联网(Internet of Things, IoT)已成为连接世界的新方式。物联网平台作为实现物联网应用的核心基础设施,其系统架构的设计和实施至关重要。本文将深入探讨物联网平台系统架构的关键要素和最佳实…...

element-ui的年份范围选择器,选择的年份需等于或小于当前年份,选择的年份范围必须在三年之内

写在前面 日期限制处理(禁用),下面我以我这边的需求为例, 选择的年份需等于或小于当前年份 选择的年份范围必须在三年之内 1.限制起始日期小于截止日期 1)根据用户选中的开始日期,置灰不可选的日期范围&…...

2024年蓝桥杯40天打卡总结

2024蓝桥杯40天打卡总结 真题题解其它预估考点重点复习考点时间复杂度前缀和二分的两个模板字符串相关 String和StringBuilderArrayList HashSet HashMap相关蓝桥杯Java常用算法大数类BigInteger的存储与运算日期相关考点及函数质数最小公倍数和最大公约数排序库的使用栈Math类…...

STL函数对象

1,函数对象 1.1 函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也称为仿函数 本质: 函数对象(仿函数&…...

DedeCMS 未授权远程命令执行漏洞分析

dedecms介绍 DedeCMS是国内专业的PHP网站内容管理系统-织梦内容管理系统,采用XML名字空间风格核心模板:模板全部使用文件形式保存,对用户设计模板、网站升级转移均提供很大的便利,健壮的模板标签为站长DIY自己的网站提供了强有力…...

学习 Rust 的第二天:Cargo包管理器的使用

今天,我们来探讨一下 Cargo,这个强大而方便的 Rust 构建系统和包管理器。 Cargo 是一个稳健而高效的 Rust 构建系统和包管理器,旨在帮助管理项目依赖关系,并确保在不同环境下进行一致的构建。 使用 cargo 创建新程序&#xff1a…...

【爬虫+数据清洗+可视化分析】Python文本分析《狂飙》电视剧的哔哩哔哩评论

一、背景介绍 把《狂飙》换成其他影视剧,套用代码即可得分析结论! 2023《狂飙》热播剧引发全民追剧,不仅全员演技在线,且符合主旋律,创下多个收视记录! 基于此热门事件,我用python抓取了B站上千…...

使用vite从头搭建一个vue3项目(二)创建目录文件夹以及添加vue-router

目录 一、创建 vue3 项目 vite-vue3-project-js二、创建项目目录三、创建Home、About组件以及 vue-router 配置路由四、修改完成后页面 一、创建 vue3 项目 vite-vue3-project-js 使用 vite 创建一个极简 vue3 项目请参考此文章:使用Vite创建一个vue3项目 下面是我…...

循环控制语句的实际应用(3)

3194:【例32.3】 数位积 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 5116 通过数: 1971 【题目描述】 給出一个非负整数n,请求出n中各个数位上的数字之积。 【输入】 一开始有一个整数 T(1≤T≤100),表示共有几组测试数据。接下来有T个…...

突破像素限制,尽显照片细腻之美——Topaz Gigapixel AI for Mac/Win

在这个数字化的时代,我们都热爱用照片记录生活中的美好瞬间。然而,有时候我们会发现,由于各种原因,照片的像素可能无法满足我们的需求。这时候,Topaz Gigapixel AI for Mac/Win 这款强大的照片放大工具应运而生。 Top…...

CSS特效---HTML+CSS实现3D旋转卡片

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…...

用Lingo搞定线性规划:一个工厂利润最大化的实例分析与代码逐行解读

用Lingo搞定线性规划&#xff1a;一个工厂利润最大化的实例分析与代码逐行解读 当工厂面临生产计划优化问题时&#xff0c;如何用数学工具找到最佳决策方案&#xff1f;Lingo作为专业的优化建模软件&#xff0c;能够将复杂的生产约束转化为可计算的数学模型。本文将以一个真实的…...

基于模型的测试在汽车行业的应用

作 者 | 路国光出 品 | 汽车电子与软件摘要&#xff1a;为解决汽车电子软件开发中传统测试效率低、覆盖不足、验证滞后等问题&#xff0c;本文以基于模型的系统工程&#xff08;MBSE&#xff09;为背景&#xff0c;研究基于模型的测试&#xff08;MBT&#xff09;在汽车行业的应…...

别再手动调参了!用Python+OpenCV玩转NCC立体匹配,手把手教你生成高质量视差图

PythonOpenCV实战&#xff1a;NCC立体匹配参数调优全指南 立体匹配是计算机视觉中获取深度信息的关键技术&#xff0c;而NCC&#xff08;归一化互相关&#xff09;作为经典的灰度匹配算法&#xff0c;在实际项目中既简单又实用。但很多开发者在使用时往往陷入手动调参的困境—…...

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南——OpenClaw一人公司-[一人公司的终极技术栈,从0到变现的完整光谱]

【限时99元】专栏原价299元,在专栏未完结的持续更新期间享受99元早鸟价,现在订阅同享后续专栏所有文章! 【专栏介绍】《OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南》专栏介绍 有任何疑问均可联系博主微信(微信号:NeumannAI),作者将亲自解答并持续优化文章内…...

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

美观的灯笼(Py/Java/C/C/Js/Go)题解 华为OD新系统机试真题 华为OD新系统上机考试真题 5月10号 100分题型 华为OD新系统机试真题目录点击查看: 华为OD新系统机试真题题库目录&#xff5c;机考题库 算法考点详解 题目描述 春节将至&#xff0c;工人要在古镇老街挂灯笼。街上有…...

CANN/Ascend C SetDilation API文档

SetDilation 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.co…...

DeepSeek V4的突破:探索未来AI意识的可能性

引言 DeepSeek V4的发布&#xff0c;再次刷新了人们对大语言模型的认知&#xff1a;更强的代码生成、更复杂的逻辑推理、更精准的长文本理解……几乎所有技术评测都在告诉我们&#xff1a;AI又向前迈进了一大步。社交媒体上&#xff0c;关于“AI是否快要拥有意识”的讨论也随之…...

AI原生转型生死线(2026奇点大会闭门报告首次公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生转型生死线&#xff08;2026奇点大会闭门报告首次公开&#xff09; 2026年奇点大会闭门报告显示&#xff1a;企业若未在2025年底前完成AI原生架构重构&#xff0c;其核心系统迭代效率将平均下降4…...

从LTV-M501到系统集成:高速光耦隔离通信的选型与实战设计

1. 高速光耦隔离通信的核心价值 第一次接触工业现场总线改造项目时&#xff0c;我被电机控制器和PLC之间的通信干扰问题折磨了整整两周。直到老工程师递给我几个LTV-M501光耦&#xff0c;问题才迎刃而解。这种通过光信号传递电信号的器件&#xff0c;就像给通信线路装上了"…...

ECharts地图渲染报错‘跨域’?别慌,一个本地静态服务器(anywhere)就能搞定

ECharts地图渲染报错‘跨域’&#xff1f;本地静态服务器解决方案全解析 当你兴奋地准备好本地GeoJSON数据文件&#xff0c;准备在ECharts中实现炫酷的地图可视化效果时&#xff0c;突然遭遇浏览器控制台抛出的"CORS policy"跨域错误&#xff0c;这感觉就像即将到达…...