Linux-线程概念
1. 线程概念

线程:轻量级进程,在进程内部执行,是OS调度的基本单位;进程内部线程共用同一个地址空间,同一个页表,以及内存中的代码和数据,这些资源对于线程来说都是共享的资源
进程:在用户视角下,内核数据结构+该进程对应的代码和数据;在内核的视角下,承担分配系统资源的基本实体
其实在之前没有了解线程之前的进程,就是一个只有一个主线程的进程
现在又该如何理解线程和进程之间的关系呢?
线程和进程之间就像家庭成员和家庭之间的概念,家庭是由所有家庭成员共同组成的,在这个社会中可能有三口之家,五口之家
我们在社会中被描述为一个整体,比如户口本就是按家庭发放的,房屋是按家庭建造的,社会资源按家庭分配的,例如疫情期间买菜
家庭成员和家庭之间的关系就是一荣俱荣,一损俱损的关系(线程异常时会触发信号机制,终止进程,内核所有线程都会退出)
我们在家庭中扮演不同的角色,也在使用不同的资源,家庭负责分配这些资源,其中有大部分资源是家庭成员之间共享的,比如卫生间,客厅,但总有一个房间是给你住的,作为你的私人空间
家庭资源:空间,数据
私人空间:后面会说
在Linux中,没有专门为线程管理,创建新的数据结构,而是沿用了进程的task_struct,用它来模拟线程,线程和进程有很多共性,为此Linux下的所有版本都安装了pthread系统库,为了提供用户使用的接口

库底层调用了clone系统接口,所以系统提供一部分,库提供一部分,就组成了Linux下的线程
所以使用线程库的时候,需要包含头文件<pthread.h>,编译时需要-lpthread
线程共享进程数据,但也拥有自己的一部分数据
线程独有:
- 线程ID
- 一组寄存器(上下文)
- 独立栈结构
- errno变量在线程内部
- 信号屏蔽字(block)
- 调度优先级
线程共有:
- 文件描述符表
- 信号处理方式
- 当前工作目录
- 用户id和组id(权限)
线程独立的栈结构(保存临时数据)和上下文数据,体现了线程的动态属性
线程如何实现独立的栈结构:

线程库提供了线程创建接口,它会在地址空间的共享区中创建对应线程的栈结构,其实在上面系统接口中就有所体现clone中有一个参数child_stack的指针,栈地址,栈的组成应该是系统提供的
通过clone系统接口的第一个参数函数指针,其实如何让线程执行自己代码,其实就是执行函数代码
2. 线程vs进程
进程是资源分配的基本单位
线程是CPU调度的基本单位
线程切换的成本更低
因为线程间共享地址空间和页表,这些不需要切换
其次,CPU内部有L1~L3 的 cache 高速缓存(对内存的代码和数据根据局部性原理,预读到CPU内部,进而提高效率)也不用切换
3. 线程的优缺点
优点:
- 创建,切换,占用资源都比进程小
- 能充分利用多处理器可并行的数量
- 在等待慢速IO操作结束的同时,程序可以执行其他任务
- 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中
- IO密集型应用,为了提高性能,将IO操作重叠,可以同时等待不同的IO
缺点:
缺乏访问控制(后续会学互斥,同步,信号量来解决这一问题)
完。
相关文章:
Linux-线程概念
1. 线程概念 线程:轻量级进程,在进程内部执行,是OS调度的基本单位;进程内部线程共用同一个地址空间,同一个页表,以及内存中的代码和数据,这些资源对于线程来说都是共享的资源 进程:…...
js的桶排序
桶排序(Bucket Sort)是一种分布式排序算法,它将元素分散到一系列桶中,然后对每个桶中的元素进行排序,并将所有的桶合并起来得到最终的排序结果。桶排序适用于输入的元素均匀分布在一个范围内的情况,它的时间…...
解决ubuntu无法上网问题
发现是网络配置成了Manual手动模式,现在都改成自动分配DHCP模式 打开后,尝试上网还是不行,ifconfig查看ip地址还是老地址,怀疑更改没生效,于是重启试试。 重启后,ip地址变了,可以打开网页了 …...
使用nvm管理多版本node.js
使用nvm(Node Version Manager)安装Node.js是一个非常方便的方法,因为它允许你在同一台机器上管理多个Node.js版本。以下是使用nvm安装Node.js的基本步骤: Linux 安装nvm 根据你的操作系统,安装命令可能会有所不同。以…...
推导 模型矩阵的逆转置矩阵求运动物体的法向量
一个物体表面的法向量如何随着物体的坐标变换而改变,取决于变换的类型。使用逆转置矩阵,可以安全地解决该问题,而无须陷入过度复杂的计算中。 法向量变化规律 平移变换不会改变法向量,因为平移不会改变物体的方向。 旋转变换会改…...
定时任务的几种实现方式
定时任务实现的几种方式: 1、JDK自带 (1)Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。…...
docker部署springboot+Vue项目
项目介绍:后台springboot项目,该项目环境mysql、redis 。前台Vue:使用nginx反向代理 方法一:docker run 手动逐个启动容器 1.docker配置nginx代理 将vue项目打包上传到服务器上。创建文件夹存储数据卷,html存放打包…...
Llama3-Tutorial(Llama 3 超级课堂)-- 笔记
第1节—Llama 3 本地 Web Demo 部署 端口转发 vscode里面设置端口转发 https://a-aide-20240416-b4c2755-160476.intern-ai.org.cn/proxy/8501/ ssh -CNg -L 8501:127.0.0.1:8501 rootssh.intern-ai.org.cn -p 43681参考 https://github.com/SmartFlowAI/Llama3-Tutorial/b…...
【备战软考(嵌入式系统设计师)】12 - 嵌入式系统总线接口
我们嵌入式系统的总线接口可以分为两类,一类是并行接口,另一类是串行接口。 并行通信就是用多个数据线,每条数据线表示一个位来进行传输数据,串行接口就是一根数据线可以来一位一位地传递数据。 从上图也可以看出,并行…...
【一刷《剑指Offer》】面试题 18:树的子结构
力扣对应题目链接:LCR 143. 子结构判断 - 力扣(LeetCode) 牛客对应题目链接:树的子结构_牛客题霸_牛客网 (nowcoder.com) 核心考点:二叉树理解,二叉树遍历。 一、《剑指Offer》对应内容 二、分析问题 二叉…...
17 M-LAG 配置思路
16 华三数据中心最流行的技术 M-LAG-CSDN博客 M-LAG 配置思路 什么是M-LAG?为什么需要M-LAG? - 华为 (huawei.com) 1 配置 M-LAG 的固定的MAC地址 [SW-MLAG]m-lag system-mac 2-2-2 2 配置M-LAG 的系统标识符系统范围1到2 [SW-MLAG]m-lag system-nu…...
深入探索CSS3 appearance 属性:解锁原生控件的定制秘密
CSS3 的 appearance 属性,作为一个强大的工具,让我们得以细致入微地控制元素的外观,特别是对于那些具有平台特定样式的表单元素,如按钮、输入框等。本文不仅会深入解析 appearance 属性的基本工作原理和使用场景,还将通…...
C# 集合(五) —— Dictionary类
总目录 C# 语法总目录 集合五 Dictionary 1. Dictionary 1. Dictionary 字典是键值对集合,通过键值对来查找 Dictionary和Hashtable的区别是Dictionary可以用泛型,而HashTable不能用泛型 OrderedDictionary 是按照添加元素时的顺序的字典,是…...
Java 函数式接口BiConsumer
BiConsumer是一个函数式接口,代表一个接受两个输入参数且不返回任何内容的操作符 import java.util.ArrayList; import java.util.List; import java.util.function.BiConsumer;public class BatchOperate<T> {private int batchSize3000;private List<T&…...
SWERC 2022-2023 - Online Mirror H. Beppa and SwerChat (双指针)
Beppa and SwerChat 题面翻译 B和她的怪胎朋友在某个社交软件上的聊天群聊天。 这个聊天群有包括B在内的n名成员,每个成员都有自己从1-n的独特id。 最近使用这个聊天群的成员将会在列表最上方,接下来较次使用聊天软件的成员将会在列表第二名࿰…...
四川汇昌联信:拼多多运营属于什么行业?
拼多多运营属于什么行业?这个问题看似简单,实则涉及到了电商行业的深层次理解。拼多多运营,顾名思义,就是在拼多多这个电商平台上进行商品销售、推广、客户服务等一系列活动。那么,这个行业具体包含哪些内容呢?下面就从四个不同…...
C++11 特性
总结 语法糖: 关键字: auto、decltype。nullptr。override、final。constexpr。语法: 基于范围的 for 循环。function 函数对象。 lambda 产生函数对象。bind 产生函数对象。目的:写代码更便捷、更严谨,让编译器做更多的事情。STL 容器: array。forward_list。unordered_…...
二、使用插件一键安装HybridCLR
预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 专栏: Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 热更方案 基于Hybri…...
【江科大STM32学习笔记】新建工程
1.建立工程文件夹,Keil中新建工程,选择型号 2.工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹 为添加工程文件准备,建文件夹是因为文件比较多需要分类管理,需要用到的文件一定要复…...
C++小程序:同一路由器下两台计算机简单通信(1/2)——服务器端
同一路由器下两台电脑如何进行通信呢?这里通过小程序实例的方式介绍SOCKET结构体以及相关函数的使用。计算机通信是在服务器端与客户端之间进行,这里先介绍服务器端程序。 我这里编辑编译软件是VS2022,使用C空项目进行编程。在介绍程序…...
Beyond Compare许可证获取与激活全攻略
1. Beyond Compare简介与许可证类型解析 Beyond Compare作为一款老牌文件对比工具,已经陪伴开发者走过了20多个年头。我第一次接触它是在2015年做代码合并时,当时就被它直观的三栏式对比界面惊艳到了——左右两侧显示对比内容,中间实时标注差…...
定制属于自己的AS-I总线
本公司自己已经完成AS-I总线主站、电源、从站模块的纯国产化,可以基于AS-I总线的基础上进行拓展,欢迎有需求的、有想法的各类人士一起撑起AS-I国产化一片天...
League-Toolkit:颠覆式英雄联盟客户端增强工具的全攻略
League-Toolkit:颠覆式英雄联盟客户端增强工具的全攻略 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是一款基于官…...
XML 指南
XML 指南 引言 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。自从1998年发布以来,XML因其灵活性和广泛的应用场景而成为数据交换的标准格式。本文旨在为您提供一个全面的XML指南,帮助您了解XML的基本概念、语法规则、应用场景以及相关的最佳实践。 XML的基本…...
RAGFlow知识库配置与RAG流程优化实战
1. RAGFlow知识库配置详解 第一次接触RAGFlow知识库时,我被它强大的文档处理能力惊艳到了。记得当时处理一批科研论文PDF,传统方法提取的内容总是支离破碎,而RAGFlow的DeepDoc解析器完美保留了文档的图表和章节结构。下面我就把踩坑后总结的配…...
seo优化机构怎样选择才合适_什么是seo优化机构
SEO优化机构怎样选择才合适_什么是SEO优化机构 在当今的数字化时代,拥有一个高效的网站已经不再是企业竞争力的唯一标准,更重要的是这个网站能够在搜索引擎上获得良好的排名。这就是搜索引擎优化(SEO)的重要性所在。选择一个合适…...
Qwen3.5-9B生产环境实测:7x24小时稳定运行+自动恢复+错误率<0.3%运维报告
Qwen3.5-9B生产环境实测:7x24小时稳定运行自动恢复错误率<0.3%运维报告 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,在实际生产环境中展现出卓越的稳定性和可靠性。经过长达一个月的7x24小时不间断运行测试,该系统实现了…...
ai辅助开发,让快马平台智能优化你的openclaw脚本安全性与性能
今天想和大家分享一个实用技巧:如何用AI辅助开发,在InsCode(快马)平台上优化openclaw脚本的安全性与性能。最近我需要一个能智能清理下载文件夹的脚本,但又要避免误删重要文件,这个需求让我深刻体会到AI辅助开发的便利性。 需求分…...
【材料】吸波材料的电导损耗和极化损耗【含Matlab源码 15266期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
自学嵌入式第三天
选择排序 先找再换,每轮先找最小的再做交换每一轮的第一个数作为最小,从第二个数开始比较选出最小值交换到第一个位置。插入排序 一列数从第二个开始作为要插入的数a,逐个向前比较,比a大的数向后移一位,直到遇见比a小…...
