深入浅出线程原理

Linux 中的线程本质

线程接口由 Native POSIX Thread Library 提供,即:NPTL 库函数

线程被称为轻量级进程 (Light Weight Process)

每一个线程在内核中都对应一个调度实体,拥有独立的结构体 (task_struct)

  • 内核设计:一个进程对应内核中的一个结构体,对应一个进程标识
  • 引入线程:线程是内核的调度实体,在内核中必然对应一个结构体

用户模式:一个进程中存在多个线程

内核模式:每个线程是一个独立的调度实体

另一个视角

拥有多线程的进程,又被称为线程组 (谁是线程组长?)

在内核数据结构 task_struct 中存在 pid 和 tgid:

pid_t pid => 线程标识符 (Thread ID)

pid_t tgid => 线程组标识符 (Thread Group ID)

进程创建后默认拥有一个线程,即:主线程 (默认执行流)

主线程的 LWP 标识与进程标识符相同,即:主线程为线程组长

其他子线程创建后隶属于当前进程:

  • 子线程的 LWP 标识符各不相同,且与进程标识符相同
  • 子线程调用 getpid() 的结果相同 (why?)

下面的程序输出什么?为什么?

问题

对于线程来说,pthread_t 类型的标识符 与 pid_t 类型标识有什么不同?

使用 ps 命令查看线程信息

-e => Select all processes

-L => Show threads,possibly with LWP and NLWP columns

-f => Do full-format listing

ps -eLf => to get info about threads

实验程序

多线程内核模型

Linux 内核中的基本调度单位为 task_struct,即:内核中以 "任务" 作为调度的基本单位

值得思考的问题

多线程之间是否有 "父子关系" ?

答:无!

进程中只有主线程和子线程,线程之间没有 "父子关系"

主线程如果先于子线程结束会发生什么?

Linux 中主线程如果执行结束,则进程结束

进程结束则进程资源被释放,子线程被迫结束

使用 kill 命令是否能够 "杀死" 指定线程 ?

kill 命令默认发送信号 SIGTERM,而信号的目标是进程

因此,kill 任意子线程的 pid_t 将导致整个进程结束

pthread_t 究竟是什么数据类型 ?

pthread_t 是 POSIX Thread 中的接口,具体定义与系统相关

通常情况下,pthread_t 的具体定义是 一个整型值

  • Linux 中 pthread_t 的具体定义是 64 位整数 (保存地址值)
  • 其他系统中 pthread_t 直接映射为 Task ID 值
  • 对于一些特殊的系统,pthread_t 是一个结构体

Linux 多线程 API 函数

线程标识相等判断

int pthread_equal(pthread_t t1, pthread_t t2);

如果 t1 和 t2 相等,返回非 0 值,否则返回 0 值

注意:

Linux 系统编程时,可直接用 t1 == t2 的方式判断是否相等

编写可移植的多线程代码,使用 pthread_equal() 判断是否相等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】matplotlib画图常用功能汇总

目录: 一、matplotlib画图风格二、matplotlib图像尺寸和保存分辨率三、matplotlib子图相关功能创建子图:绘制子图:设置子图属性:调整布局:示例代码: 四、matplotlib字体设置字体族和字体的区别字体选择和设置1. Matplo…

亚马逊云科技 WAF 部署小指南(五):在客户端集成 Amazon WAF SDK 抵御 DDoS 攻击...

方案介绍 在 WAF 部署小指南(一)中,我们了解了 Amazon WAF 的原理,并通过创建 WEB ACL 和托管规则防护常见的攻击。也了解了通过创建自定义规则在 HTTP 请求到达应用之前判断是阻断还是允许该请求。在 Amazon WAF 自定义规则中&am…

水果音乐编曲软件 FL Studio v21.2.2.3914 中文免费版(附中文设置教程)

FL studio21中文别名水果编曲软件,是一款全能的音乐制作软件,包括编曲、录音、剪辑和混音等诸多功能,让你的电脑编程一个全能的录音室,它为您提供了一个集成的开发环境,使用起来非常简单有效,您的工作会变得…

【书生·浦语】大模型实战营——第四课作业

教程文档:https://github.com/InternLM/tutorial/blob/main/xtuner/self.md 基础作业需要构建数据集,微调模型,让其明白自己的弟位(OvO!) 微调环境准备 进入开发机后,先bash,再创…

列表解析与快速排序

排序是在对文本、数值等数据进行操作时常用的功能,本文介绍两种常用的排序方式,借此学习列表解析,并巩固递归算法。 1 选择排序 说到排序,以数值为例,肯定涉及到值大小的对比,选择排序即通过依次在子集中…

蓝桥杯 python 第二题 数列排序

这里给出一种解法 """ # 错的 n int(input()) dp[int(i) for i in input().split(" ")] dp.sort() print(" ".join(str(i) for i in dp)) """#这个是对的 num int(input())l list(map(int, input().split()))l.sort()pr…

AI文本生图模型Stable Diffusion部署教程

本文基于CentOS8进行Stable Diffusion开源框架部署. 1. DNS配置(但是今天出现了偶尔无法下载问题) 为了加速Github访问,我在本机配置如下 (sd) [rootshenjian stable-diffusion-webui]# cat /etc/hosts 127.0.0.1 shenjian localhost localhost.localdomain localhost4 loca…

修改权限控制(chmod命令、chown命令)

1.chmod命令 功能:修改文件、文件夹权限(注意,只有文件、文件夹的所属用户或root用户可以修改) 语法:chmod [-R] 权限 参数 权限,要设置的权限,比如755,表示:rwxr-xr-x…

【面试突击】生产部署面试实战

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

如何从电脑找回/恢复误删除的照片

按 Shift Delete 以后会后悔吗?想要恢复已删除的照片吗?好吧,如果是这样的话,那么您来对地方了。在本文中,我们将讨论如何从 PC 中检索已删除的文件。 自从摄影的概念被曝光以来,人们就对它着迷。早期的照…

Markdown编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Windows Server 2012 R2部署项目

JDK 下载JDK 1.直接官网下载:http://www.oracle.com/; 2.我用的是1.8,阿里云盘分享地址:https://www.aliyundrive.com/s/u4V9x1AHL2r 安装jdk 双击安装点击下一步如果不改变路径就一直下一步 安装完成直接点击关闭即可&#x…

GPT Store,是否会成为下一个App Store?

经历了一场风波后,原本计划推出的GPT Store终于成功上线。OpenAI在北京时间1月11日推出了GPT Store,被广泛视为类似于苹果的"App Store",为人工智能应用生态系统迈出了重要一步。然而,OpenAI要想将GPT Store打造成苹果般…

一、docker的安装与踩坑

目录 一、安装docker(centos7安装docker)1.安装环境前期准备2.参考官网安装前准备3.参考官网安装步骤开始安装docker4.运行首个容器 二、安装一些软件的踩坑1.启动docker踩坑2.安装mysql踩坑3.罕见问题 三、关于我的虚拟机 一、安装docker(ce…

如何再造宇宙厂所有APP?

本文内容,纯属十年老架构师杜撰,切勿照着实操,可能会给你带来几十亿的流量,怕你的服务器扛不住。 1. 破音 前端用uniapp,花800买个短视频应用模板,后端用golang支持高并发, 数据库用图数据库加elastic se…

ArchVizPRO Interior Vol.8 URP

ArchVizPRO Interior Vol.8 URP是一个在URP中制作的建筑可视化项目。这是一个完全可导航的现代公寓,包括一个带开放式厨房的客厅、休息区、两间卧室和两间浴室。从头开始构建每一个细节,这个室内有130多件家具和道具、自定义着色器和4K纹理。所有家具和道具都非常详细,可以在…

基于 LangChain+大模型,我打造一款自己的LLM应用

本文共计1.7w字,梳理不易,喜欢点赞、收藏、关注。需要技术交流,可以加入我们 目录 通俗易懂讲解大模型系列技术交流一、LangChain是什么二、LangChain核心组件2.1 Models2.2 Indexes2.2.1 Document Loaders2.2.2 Text Splitters2.2.3 Vectors…

网络安全B模块(笔记详解)- MYSQL信息收集

MYSQL信息收集 1.通过渗透机场景Kali中的渗透测试工具对服务器场景MySQL03进行服务信息扫描渗透测试(使用工具Nmap,使用必须要使用的参数),并将该操作显示结果中数据库版本信息作为Flag提交; Flag:MySQL 5.5.12 2.通过渗透机场景Kali中的渗透测试工具对服务器场景MySQL0…

【光波电子学】基于MATLAB的多模光纤模场分布的仿真分析

基于MATLAB的多模光纤模场分布的仿真分析 一、引言 (1)多模光纤的概念 多模光纤(MMF)是一种具有较大纤芯直径的光纤结构,其核心直径通常在10-50微米范围内。与单模光纤(SMF)相比,…

Linux QT以太网配置及相关知识

Linux QT以太网配置及相关知识 平台和内容概述安装Qt Creator设计用户界面编辑源代码自定义LineEdit创建槽函数以太网逻辑功能实现静态配置ui逻辑:功能概述代码实现DNS退出程序输入框中的ip规范保存数据和读取数据构建文件编译运行平台注意点开机自动配置以太网总结平台和内容…