Linux——线程概念及私有数据和优缺点

news2024/12/29 1:13:15

目录

一.什么是线程

二.线程私有的数据

三.线程的优点

四.线程的缺点

五.线程与进程对比


一.什么是线程

线程是在进程内部运行,一个进程可以有多个线程

打个比方,假如人是一个进程,那么走路、思考、吃饭、说话作为不同的线程。一个进程能有多个线程同时运行,就好比一个人在走路时还可以思考、说话、吃饭一样。

可以说,线程就是进程的“四肢”,是进程运行的基本单位,是CPU调度的基本单位。

画个草图如下:

总结而言,在一个程序里的一个执行路线就叫做线程,且一个进程至少要有一个执行线程。

线程与进程共享虚拟地址空间、页表等内核数据结构、数据和代码。
线程的数据结构理论上与进程的不同,但基于线程和进程的相似性,linux的线程数据结构依旧采用
task_struct结构体,与进程的一致
。但是其他的操作系统线程有专属的结构,与进程的不同。也就是说,linux没有真正意义上的线程结构,而是采用进程的task_struct结构体模拟的线程。

即便线程与进程都采用task_struct结构体,但是内核数据结构依旧属于进程,线程只是与进程共享。
换句话说,进程 = 多个线程(执行流)+ 内核数据结构 + 数据 + 代码。
而task_struct本质就是进程内部的一个执行流。
对于CPU而言,本质上只是调度task_struct,而不会区分进程还是线程。

图示如下:

二.线程私有数据及区域

所有线程共享进程的内核数据结构、数据及代码,但是每个线程也有自己私有的数据

比如线程id、寄存器和栈,还有errno、信号屏蔽字(block位图)、调度优先级。

linux的线程数据创建在共享区中,因此,线程结构在共享区中。

linux使用pthread库来创建及管理线程,而pthread作为动态库需要加载到共享区,进而线程创建在共享区中。

线程栈、局部存储数据(__pthread类型变量)及线程id由pthread库函数创建的struct pthread结构体管理。该结构体在共享区,因此,线程的栈也在共享区中

值得注意的是:

①主线程使用虚拟地址空间中的栈区,只有其他线程使用共享区中分配的栈区。

②线程id本质是共享区pthread库所分配给该线程空间的起始地址,即id本质是一个地址。

图示如下:

三.线程的优点

①创建线程的代价比创建进程小。创建线程只用创建task_struct结构体,而进程还有相关内核数据结构,加载数据和代码。

②线程切换效率比进程切换高。线程占用系统资源少,切换更高效。线程切换时不会清除缓存数据,进程切换会清除缓存。

③线程可以充分利用CPU多核心的优势(多线程)。可以同时执行不同的任务,使得多个任务能够并发进行。

④多线程可以提高计算密集型和IO密集型应用的效率。计算密集型应用可以将计算分给多个线程处理,IO密集型应用可以使用多线程同时进行不同的IO操作。

四.线程的缺点

①多线程的健壮性差。多线程之间没有数据保护,可能存在因为线程执行顺序问题导致的数据错误。

②缺乏访问控制。线程访问某些系统函数可能会对整个进程造成影响。

③多线程程序调试难度大。多线程代码的调试比单线程困难许多。

五.线程与进程对比

①一个进程可以有多个线程,且只少有一个线程。

②进程拥有内核数据结构、数据及代码,线程只有使用权和必不可少的私有数据如寄存器和栈。

③线程执行效率通常更高,但不安全。

④一个线程异常,整个进程异常。


如有错误,敬请斧正

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

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

相关文章

《Linux Shell脚本攻略》学习笔记-第十章

10.1 Linux的生态系统由网络、硬件、负责分配资源的操作系统内核、接口模块、系统实用工具以及用户程序所组成的。 10.2 运行在计算机中的多个进程都被分配了一个被称为进程ID的唯一标识数字。进程属性包括拥有该进程的用户、进程使用的内存数量、进程占用的CPU时间。 ps命令默…

拉伯证券|年内第二大解禁周来袭

Wind数据显现,除掉新上市公司,本周A股共有54家公司限售股解禁,解禁数量270.57亿股,以最新收盘价计算(下同),解禁市值1752.90亿元,为年内第二大解禁周。 本周解禁市值超越10亿元的公司…

YOLOv8代码上线,官方宣布将发布论文,附精度速度初探和对比总结

【YOLOv8 注意事项】 1. YOLOv8 的官方仓库和代码已上线,文档教程网址也刚刚更新。 2. YOLOv8 代码集成在 ultralytics 项目中,目前看不会再单独创建叫做 YOLOv8 的项目。 3. YOLOv8 即将有论文了!要知道 YOLOv5 自从 2020 年发布以来&…

阿里云服务器安装图形界面

为了自动化流程安装图形界面,我的服务器是Centos7 1、yum安装gnome图形界面 yum groupinstall “GNOME Desktop” -y 2、安装远程桌面服务端 yum -y install tigervnc-server -y 3、启动远程桌面服务端(将桌面服务绑定到5903端口) vncserver :3 4、阿里控制台放开59…

SpringBoot+VUE前后端分离项目学习笔记 - 【23 权限菜单 续】

BUG1 : 路由跳转问题 访问错误路由: 已登录用户返回404,未登录用户返回登录页面 Route/index.js 路由守卫增加判断 router.beforeEach((to, from, next) > {localStorage.setItem("currentPathName", to.name) // 设置当前的路由名称s…

【墙角数枝梅,凌寒独自开】代码改变未来

墙角数枝梅,凌寒独自开 “墙角数枝梅,凌寒独自开。” 出自王安石的《梅花》 诗句是集语言中的精华,浓缩为七言、五言和四言等,寥寥几句道尽人生酸甜苦辣,儿女情长。 而我更愿把现代的程序员称作诗人,语言是…

ESP32设备驱动-TCS34725颜色传感器驱动

TCS34725颜色传感器驱动 文章目录 TCS34725颜色传感器驱动1、TCS34725介绍2、硬件准备3、软件准备4、驱动实现1、TCS34725介绍 TCS3472 器件提供红色、绿色、蓝色 (RGB) 和清晰光感应值的数字返回。 集成在芯片上并定位于颜色传感光电二极管的 IR 阻挡滤光片可最大限度地减少入…

并发场景使用SimpleDateFormat异常问题和解决

SimpleDateFormat类主要是负责日期的格式化与转换操作,因为它不是线程安全的,所以使用SimpleDateFormat时,务必确保同一个SimpleDateFormat对象不要与其他线程共享,否则并发情况下会出现问题 目录异常示例解决方案1:创…

Camera | 2.MIPI、CSI基础

瑞芯微专栏 上一篇我们讲解了camera的一些基础概念和知识。 我们说了,现在的手机由于高分辨率的要求,现在基本上都是基于MIPI、CSI协议来实现的, 本篇讲解MIPI、CSI的一些基础知识。 摄像头常用术语 下面这些术语是camera驱动中经常用到的…

9.6 容器适配器

文章目录定义一个适配器stack队列适配器queuepriority_queue 优先队列适配器是标准库的一个通用概念,容器、迭代器和函数等都有适配器。适配器是一种机制,接受一种已有容器类型。标准库有三个顺序容器适配器:stack,queue和priorit…

Elasticsearch:关于在 Python 中使用 Elasticsearch 你需要知道的一切 - 8.x

在本文中,我们将讨论如何在 Python 中使用 Elasticsearch。 如果你还不了解 Elasticsearch,可以阅读这篇文章 “Elasticsearch 简介” 进行快速介绍。在我之前的文章 “Elasticsearch:使用最新的 Python client 8.0 来创建索引并搜索”&#…

Pytorch自定义数据集模型训练流程

文章目录Pytorch模型自定义数据集训练流程1、任务描述2、导入各种需要用到的包3、分割数据集4、将数据转成pytorch标准的DataLoader输入格式5、导入预训练模型,并修改分类层6、开始模型训练7、利用训好的模型做预测Pytorch模型自定义数据集训练流程 我们以kaggle竞…

响应式流的核心机制——背压机制

一、响应式流是什么? Reactive Streams 是 2013 年底由 Netflix、Lightbend 和 Pivotal(Spring 背后的公司)的工程师发起的一项计划,响应式流旨在为无阻塞异步流处理提供一个标准。它旨在解决处理元素流的问题——如何将元素流从…

【BP靶场portswigger-客户端14】点击劫持-5个实验(全)

前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员&…

Fastdfs分布式文件系统原理浅析

文章目录1、fastdfs文件系统原理简述2、storage server状态2.1 组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:第一步:第二步:第三步:第四步:3、同步时间管理4、B…

[有人@你]请查收你的年终总结报告

嗨,兄dei,我是建模助手。 新年伊始,最近大家想必已经被各大平台的2022年度报告刷屏了。 听歌软件伴你度过的失眠夜,外卖软件拯救你的饥饿时刻,还有某俩宝账单告诉你,其实你是有钱的,只是你看不到…

基于有向图的邻接矩阵计算其割点、割边、压缩图,并用networkx可视化绘制

基于有向图的邻接矩阵计算其割点、割边、压缩图,并用networkx可视化绘制为什么基于邻接矩阵计算图的割点、割边、压缩图实现python代码代码运行效果结论:为什么基于邻接矩阵计算图的割点、割边、压缩图 由于矩阵计算过程,被广泛优化&#xf…

Linux关于 gdb 调试器的使用

坚持看完,结尾有思维导图总结 这里写目录标题debug 和 release 版本gdb 常见命令断点逐行调试和观察变量总结debug 和 release 版本 首先要说的是 ,在 Linux 中 gcc 直接编译是不能进行调试的 而是要在加上 -g 选项才能得到可调试的文件 以下程序用一个…

算法第十二期——BFS-双向广搜

双向广搜 应用场景:有确定的起点s和终点t;把从起点到终点的单向搜索,变换为分别从起点出发和从终点出发的“相遇”问题。操作:从起点s(正向搜索)和终点t(逆向搜索)同时开始搜索,当两个搜索产生…

Spring入门-Spring事务管理

文章目录1,Spring事务管理1.1 Spring事务简介1.1.1 相关概念介绍1.1.2 转账案例-需求分析1.1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步…