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

Linux 第三十二章

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

线程

线程的概念

linux并不存在真正意义上的线程,而是利用进程的资源模拟实现线程的

ps -aL

CPU 的局部性原理

cache:高速缓存


线程

线程的概念

线程是比进程更加轻量化的执行流/线程是在进程内部执行的一种执行流

在 Linux 中,线程是指在同一进程内并发执行的轻量级执行单元。与进程不同的是,线程共享相同的地址空间和其他资源,包括文件描述符、信号处理和状态信息。每个线程都有自己的栈,但它们共享数据段、代码段和其他内存部分。这使得线程之间的切换比进程之间的切换更加高效。

线程是CPU调度的基本单位/进程是承担系统资源的基本实体

创建一个线程,只需要创建pcb,不需要创建虚拟地址空间、页表等,多个进程pcb指向一个虚拟地址空间即可

os如果支持线程,也必须管理线程,先描述,再组织,TCB(linux中不会单独设计线程TCB,因为线程大多数东西,都是和PCB差不多,所以只需要复用即可,windows是单独设计了一套TCB)

linux并不存在真正意义上的线程,而是利用进程的资源模拟实现线程的

事例

#include<iostream>
#include<pthread.h>
#include<unistd.h>using namespace std;void* threadroutine(void* arg)
{
const char* threadname=(const char*)arg;while(true)
{
cout<<"I am a new thread"<<threadname<<endl;
sleep(1);
}
}int main(){
//这里已经有进程了
pthread_t tid;pthread_create(&tid,nullptr,threadroutine,(void*)"thread 1");//主线程
while(true)
{
cout<<"I am main thread"<<endl;
sleep(1);
}
return 0;}结果:
[BCH@hcss-ecs-6176 2_21]$ ./testThread 
I am main thread
I am a new threadthread 1
I am main thread
I am a new threadthread 1
I am main thread
I am a new threadthread 1
I am main thread
I am a new threadthread 1
I am main thread
I am a new threadthread 1[BCH@hcss-ecs-6176 2_21]$ while :; do ps ajx | head -1 && ps ajx | grep testThread | grep -v grep; sleep 1; done PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND6528  2570  2570  6528 pts/5     2570 Sl+   1000   0:00 ./testThreadPPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND6528  2570  2570  6528 pts/5     2570 Sl+   1000   0:00 ./testThreadPPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND6528  2570  2570  6528 pts/5     2570 Sl+   1000   0:00 ./testThreadPPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND6528  2570  2570  6528 pts/5     2570 Sl+   1000   0:00 ./testThreadPPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND6528  2570  2570  6528 pts/5     2570 Sl+   1000   0:00 ./testThreadPPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND6528  2570  2570  6528 pts/5     2570 Sl+   1000   0:00 ./testThreadPPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND从结果可以知道,主线程和新线程都向屏幕输出了,并且通过ps指令检测只有一个进程

ps -aL

ps -aL 命令用于显示系统中所有进程的详细信息,包括每个线程的信息。在 ps -aL 命令中,-a 选项表示显示所有用户的进程,-L 选项表示显示每个线程的信息。这样,执行该命令后会列出系统中所有进程及其相关的线程信息。

事例

[BCH@hcss-ecs-6176 2_21]$ ps -aLPID   LWP TTY          TIME CMD//轻量级进程
11501 11501 pts/5    00:00:00 testThread
11501 11503 pts/5    00:00:00 testThread
11780 11780 pts/1    00:00:00 ps
29191 29191 pts/2    00:00:00 top在pcb中有一个LWP字段,它和pid类似的

CPU调度的时候看的都是LWP

如果进程里面只有一个pcb,那么这个线程的pid和lwp数值是一样的

如果进程里面只有多个pcb,那么这个主线程的pid和lwp数值是一样的,其他线程的pcb和lwp是不一样的

线程间通信的成本很低,因为他们共享的是同一份资源,而进程间通信的成本就比较高

线程之间切换,不用切换cpu中所有的寄存器

进程之间切换,需要切换cpu中所有的寄存器

CPU 的局部性原理

CPU 的局部性原理是指在程序访问内存时,程序很可能会重复访问一组相邻的内存地址,而不是随机地访问各个内存地址。这种局部性原理通常分为两种类型:时间局部性和空间局部性。

1. 时间局部性(Temporal Locality)

时间局部性是指如果一个数据被访问过一次,那么在不久的将来它可能会再次被访问。这意味着程序倾向于重复使用最近访问过的数据。CPU 利用时间局部性可以减少从内存中加载数据的次数,提高程序的性能。

2. 空间局部性(Spatial Locality)

空间局部性是指如果一个数据被访问过一次,那么与该数据相邻的数据也很可能会在不久的将来被访问。这意味着程序倾向于访问连续内存地址中的数据。CPU 利用空间局部性可以通过预取缓存行等技术来提前加载相邻数据,减少访问延迟,进而提高程序的性能。

cache:高速缓存

缓存的作用是提高 CPU 的性能。CPU 访问主内存需要花费很长时间,而缓存可以存储 CPU 频繁访问的指令和数据,以便快速地响应 CPU 的访问请求。当 CPU 访问主内存时,如果所需数据已经存储在缓存中,则可以直接从缓存中获取数据,从而避免了访问主内存所需的长时间延迟。这种方式称为缓存命中(cache hit)。

线程间切换,不需要切换cache

线程切换为什么效率高

1.寄存器切换的少

2.cache不需要重新切换

时间片也要被内部的线程瓜分,时间片也是资源

 🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸   

相关文章:

Linux 第三十二章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…...

手机号码的正则表达式

手机号码的正则表达式会根据不同的国家/地区有所不同&#xff0c;因为每个国家/地区都有自己特定的手机号码格式。但是&#xff0c;我可以为你提供一个通用的正则表达式模板&#xff0c;并给出一些具体国家/地区的例子。 通用模板 一个基本的手机号码正则表达式模板可能如下所…...

机器学习入门介绍

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 三大方向机器学习产生的原因机器如何学习…...

一文说通用户故事点数是什么?

一文说通用户故事点数是什么&#xff1f; 第26期&#xff1a;一文说通用户故事点数是什么&#xff1f; 用户故事点数是一种采用相对估算法进行估算的一种工具&#xff0c;一般采用斐波那契数列表征用户故事里说的大小&#xff0c;采用0 1 2 3 5 8 13这样的一些数字来表征用户…...

GAME101-Lecture07学习

前言 今天主要讲shading&#xff08;着色&#xff09;。在讲着色前&#xff0c;要先讲图形中三角形出现遮挡问题的方法&#xff08;深度缓存或缓冲&#xff09;。 先采样再模糊错误&#xff1a;对信号的频谱进行翻译&#xff08;在这期间会有频谱的混叠&#xff09;&#xff…...

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努…...

ICSE docker related research

ICSE 2024 Empirical Study of the Docker Smells Impact on the Image Size Docker 气味对镜像大小影响的实证研究 Docker 是一种广泛采用的打包和部署应用程序的工具&#xff0c;它利用 Dockerfile 来构建镜像。然而&#xff0c;创建最佳的 Dockerfile 可能具有挑战性&…...

【C++】学习笔记——多态_1

文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承&#xff0c;那组合又是什么&#xff1f;下面这种情况就是…...

C++map容器关联式容器

Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而map、set是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xff0…...

TS-抽象类和静态成员

目录 1&#xff0c;抽象类1&#xff0c;为什么需要抽象类2&#xff0c;抽象成员3&#xff0c;设计模式-模板模式 2&#xff0c;静态成员1&#xff0c;什么是静态成员2&#xff0c;设计模式-单例模式 1&#xff0c;抽象类 1&#xff0c;为什么需要抽象类 有时&#xff0c;某个…...

SharePoint 使用renderListDataAsStream方法查询list超过5000时的数据

问题&#xff1a; 当SharePoint List里的数据超过5000时&#xff0c;如果使用常用的rest api去获取数据&#xff0c;例如 await this.sp.web.lists.getByTitle(Document Library).rootFolder.files.select(*, listItemAllFields).expand(listItemAllFields).filter(listItemA…...

2024042001-计算机网络 - 物理层

计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向&#xff0c;分为以下三种通信方式&#xff1a; 单工通信&#xff1a;单向传输半双工通信&#xff1a;双向交替传输全双工通信&#xff1a;双向同时传输 带通调制 模拟信号…...

通过java将数据导出为PDF,包扣合并单元格操作

最近项目中需要将查询出来的表格数据以PDF形式导出&#xff0c;并且表格的形式包含横向行与纵向列的单元格合并操作&#xff0c;导出的最终效果如图所示&#xff1a; 首先引入操作依赖 <!--导出pdf所需包--><dependency><groupId>com.itextpdf</groupId&…...

Java内存模式以及volatile关键字的使用

1.Java内存模型 &#xff08;1&#xff09;Java 内存模型&#xff08;Java Memory Model&#xff0c;简称 JMM&#xff09;&#xff0c;它是一个抽象的概念&#xff0c;JMM是和多线程相关的&#xff0c;它是一组规范&#xff0c;描述了一组规则&#xff0c;定义了多线程对共享…...

每日5题Day3 - LeetCode 11 - 15

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxArea(int[] height) {//这道题比较特殊&#xff0c;因为两边是任意…...

路由器、交换机和网卡

大家使用VMware安装镜像之后&#xff0c;是不是都会考虑虚拟机的镜像系统怎么连上网的&#xff0c;它的连接方式是什么&#xff0c;它ip是什么&#xff1f; 路由器、交换机和网卡 1.路由器 一般有几个功能&#xff0c;第一个是网关、第二个是扩展有线网络端口、第三个是WiFi功…...

腾讯开源混元DiT文生图模型,消费级单卡可推理

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接…...

shell脚本基础(if/else结构)

命令是双向选择语句&#xff0c;当用户执行脚本时如果不满足if后的表达式也会执行else后的命令&#xff0c;所以有很好的交互性。其结构为&#xff1a; if expression1 then command … command else command … command fi vim ifelse_exam.sh #ifelse_exam.sh #!/bin/bashec…...

万字长文破解 AI 图片生成算法-Stable diffusion (第一篇)

想象一下&#xff1a;你闭上眼睛&#xff0c;脑海中构思一个场景&#xff0c;用简短的语言描述出来&#xff0c;然后“啪”的一声&#xff0c;一张栩栩如生的图片就出现在你眼前。这不再是科幻小说里才有的情节&#xff0c;而是Stable Diffusion——一种前沿的AI图片生成算法—…...

Linux---编辑器vim的认识与简单配置

前言 我们在自己的电脑上所用的编译软件&#xff0c;就拿vs2022来说&#xff0c;我们可以在上面写C/C语言、python、甚至java也可以在上面进行编译&#xff0c;这种既可以用来编辑、运行编译&#xff0c;又可以支持很多种语言的编译器是一种集成式开发环境&#xff0c;集众多于…...

全新UI 阅后即焚V2正式版系统源码_全开源_安全加密传输

概述 在数字化信息交流日益频繁的今天&#xff0c;如何安全、私密地传输敏感数据&#xff08;如商业机密、登录凭证、个人隐私&#xff09;已成为企业和个人用户共同面临的严峻挑战。传统的即时通讯工具往往存在聊天记录留存、云端备份等安全隐患&#xff0c;难以满足“阅后即…...

【免费下载】 树莓派4B原理图资源下载

树莓派4B原理图资源下载 【下载地址】树莓派4B原理图资源下载分享 树莓派4B原理图资源下载本仓库提供了一个方便的途径&#xff0c;供大家下载树莓派4B的原理图资源文件 项目地址: https://gitcode.com/open-source-toolkit/ae590 本仓库提供了一个方便的途径&#xff0…...

国产多模态大模型:产业协同全景与实战指南

国产多模态大模型&#xff1a;产业协同全景与实战指南 引言 在人工智能浪潮席卷全球的背景下&#xff0c;国产多模态大模型正从技术探索迈向广泛的产业协同应用。与只能处理文本或图像的单一模态模型相比&#xff0c;多模态大模型能同时理解、关联和生成文本、图像、音频、视频…...

Linux密钥权限检查排查方法

Linux密钥权限检查排查方法本文面向具备一定 Linux 基础的技术人员&#xff0c;围绕密钥权限检查展开&#xff0c;重点讨论授权文件、私钥权限和登录失败。在中级运维和系统管理工作中&#xff0c;这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在一起…...

ContextMenuManager:3分钟彻底清理Windows右键菜单的免费神器

ContextMenuManager&#xff1a;3分钟彻底清理Windows右键菜单的免费神器 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否经常在Windows右键菜单中迷失方向…...

别再只盯着大厂光环了:聊聊外包经历对技术人真正的价值与局限

外包经历的技术价值辩证&#xff1a;从职业跳板到能力陷阱的深度思考 当招聘网站上"大厂外包"的职位描述与诱人薪资同时出现时&#xff0c;很多技术人都会面临职业选择的十字路口。我们习惯性地将外包岗位视为"二等公民"&#xff0c;却鲜少客观分析这段经历…...

【LangChain 】从一行 LCEL 代码,理解 LangChain 管道操作符 `|` 的自动转换机制

从一行 LCEL 代码&#xff0c;理解 LangChain 管道操作符 | 的自动转换机制一、从一个代码片段说起 先看这段处理用户反馈的 LCEL 代码&#xff1a; processing_chain (extract_chain| RunnablePassthrough.assign(analysislambda x: analysis_chain.invoke(x["original_…...

【智能算法】淘金优化算法(GRO)实战:从理论到代码的寻优之旅

1. 淘金优化算法&#xff08;GRO&#xff09;初探&#xff1a;从挖矿到代码的奇妙映射 第一次听说淘金优化算法时&#xff0c;我脑海中立刻浮现出19世纪美国西部的淘金热场景。有趣的是&#xff0c;这个算法的发明者K Zolf团队正是从这段历史中获得灵感。想象一下&#xff0c;…...

内网手机远程桌面:解锁高效协同的数字密钥

在数字化办公与生活深度融合的当下&#xff0c;人们对于信息获取与设备操控的便捷性需求持续攀升。当我们身处内网环境&#xff0c;却渴望随时随地操控远端的电脑设备&#xff0c;内网手机远程桌面技术便如同一把精准的数字密钥&#xff0c;打破空间与网络的束缚&#xff0c;为…...

RISC-V Coremark 移植与性能调优实战

1. Coremark基准测试与RISC-V的适配基础 Coremark作为嵌入式处理器性能评估的黄金标准&#xff0c;其设计初衷就是为了解决传统Dhrystone测试的局限性。我第一次在RISC-V平台上移植Coremark时&#xff0c;发现它确实比Dhrystone更适合现代处理器架构评估。Coremark测试包含三个…...