在Linux中宏观的看待线程

news2024/9/20 22:22:52

线程一旦被创建,几乎所有的资源都是被所有的线程共享的。
线程也一定要有自己私有的资源,什么样的资源应该是线程私有的?

 1.PCB属性私有

 2.要有一定的私有上下文结构

 3.每个线程都要有独立的栈结构

ps -aL

 ##1. Linux线程概念

###什么是线程

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序 列”

一切进程至少都有一个执行线程

线程在进程内部运行,本质是在进程地址空间内运行

在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化

透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程 执行流

 

 3.线程切换cache不需要太更新,但是进程切换,cache需要全部更新。

CPU中存在高速缓存cache

线程的优点

创建一个新线程的代价要比创建一个新进程小得多

与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多

线程占用的资源要比进程少很多

能充分利用多处理器的可并行数量

在等待慢速I/O操作结束的同时,程序可执行其他的计算任务

计算密集型(CPU,加密,解密,算法等)应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现

I/O密集型(外设,访问磁盘,显示器,网络)应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

ls /lib64/libpthread.*
/lib64/libpthread.a  /lib64/libpthread.so  /lib64/libpthread.so.0

  /lib64/libpthread.so.0(用户级线程库)

任何Linux操作系统,都必须默认携带这个库(原生线程库)

 OS只认线程,用户也只认线程。

Linux无法直接提供创建线程的系统调用接口!而只能提供创建轻量级进程的接口。

windows中为线程设计了专门的数据结构表示线程对象。TCB

 

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

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

相关文章

深度学习每周学习总结N6:使用Word2vec实现文本分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结:1.加载数据2. 构建词典3. 生成数据批次和迭代器4.模型搭建及初始化5. 定义训练与评估函数6. 拆分数据集并运行模…

界面控件(无ui文件)

目录 菜单栏 工具栏 状态栏 停靠部件和核心部件 菜单栏 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {// 菜单栏,获取当前窗口的菜单栏,没有会自动创建一个QMenuBar *mb this->menuBar();// 添加菜单QMenu *menuFile mb-&g…

【ML】Pre-trained Language Models及其各种微调模型的实现细节和特点

Pre-trained Language Models及其各种微调模型的实现细节和特点 1. Pre-trained Language Models2. semi-supervised Learning3. zero-shot4. Parameter-Efficient Fine-Tuning4.1 含义:4.2 实现方式: 5. LoRA5.1 LoRA 的主要特点:5.2 LoRA 的…

【QT 5 QT 6 构建工具qmake-cmake-和-软件编译器MSVCxxxvs MinGWxxx说明】

【QT 5报错:/xxx/: error: ‘class Ui::frmMain’ has no member named ‘xxx’-和-软件编译器MSVCxxxvs MinGWxxx说明】 1、前言2 、qt 中 Qmake CMake 和 QBS1-qmake2-Cmake3-QBS4-官网一些说法5-各自特点 3、软件编译套件1-Desktop Qt 6.7.2 llvm-mingw 64-bit2-…

SpringBoot排除默认日志框架

默认用的logback application.properties中的配置无需改变,自动装配会根据条件(哪个日志的.class是否存在) 进行切换 只要切换日志配置文件就好 比如原来使用的logback-spring.xml换成log4j2-spring.xml 日志文件网上找找

Flink-DataWorks第三部分:数据集成(第59天)

系列文章目录 2.4 任务配置方式 2.4.1 DataStudio侧离线同步 2.4.1.1 开发流程概览 2.4.1.2 步骤一:新建离线同步节点 2.4.1.3 步骤二:配置同步网络链接 2.4.1.4 步骤三:配置数据来源与去向 2.4.1.5 步骤四:配置字段映射关系 2.4…

C:野指针介绍(定义、危害、规避)以及野指针与空指针的区分

目录 1、野指针 1.1 野指针的成因 1.指针未初始化 2.指针越界访问 3.指针指向的空间释放 1.2 野指针的危害 1.3 如何规避野指针 1. 指针初始化 2. 小心指针越界 3.指针变量不使用就及时赋上NULL 4. 指针使用前检查是否是空指针 5. 避免返回局部变量的地址 1.4 区…

微信小程序【五】摇骰子

摇骰子 一、dice.js二、dice.json三、dice.wxml四、dice.wxss 效果简述:点击设置“骰子个数”,喝一杯前,先摇一摇。 骰子图片命名示例: 1.png、2.png 一、dice.js Page({data: {numDice: 1, // 初始化骰子数diceImages: [],dic…

【iOS多线程(二)】GCD其他方法详解

GCD其他方法 dispatch_semaphore (信号量)什么是dispatch_semaphore(信号量)?dispatch_semaphore主要的三个方法dispatch_semaphore主要作用线程安全线程同步 dispatch_afterdispatch_time_t 两种形式 GCD 一次性代码(只执行一次&#xff09…

电脑维修店的主题源码 简洁wordpress企业主题模版下载

简洁wordpress企业主题,一个简洁的电脑维修店的主题 源码下载:https://download.csdn.net/download/m0_66047725/89612932 更多资源下载:关注我。

【深度学习】TTS,CosyVoice,推理部署的代码原理讲解分享

文章目录 demo代码加载配置文件speech_tokenizer_v1.onnx(只在zero_shot的时候使用)campplus.onnx(只为了提取说话人音色embedding)`campplus_model` 的作用代码解析具体过程解析总结示意图CosyVoiceFrontEndCosyVoiceModel推理过程总体推理过程推理速度很慢: https://git…

OpenNebula-6.9.80使用介绍

目录 准备:给宿主机添加一块网卡 1. 创建群组 2. 创建用户 3. 创建集群 4. 创建主机 5. 安全组 6. 网络模板 7. 虚拟网络 8. 导入镜像 9. 创建虚拟机模板 10. 实例化虚拟机 11. 卸载磁盘 12. 再次实例化 13. 添加新节点 14. 虚拟机迁移 准备&…

面壁的智能开源 MiniCPM-V 2.6 边缘人工智能多模态功能与 GPT-4V 不相上下

"MiniCPM-V2.6 "是一个边缘多模态人工智能模型,仅拥有 80 亿个参数,却在单图像、多图像和视频理解任务中取得了低于 200 亿个参数的三项 SOTA(艺术境界)成绩,显著增强了边缘多模态能力,并与 GPT-…

python.tkinter设计标记语言(转译2-html)

TOC 前言 本文只作为笔记记录。 前文我们已经通过TinText渲染器部分和TinML获得了test.tin解释后的标记内容列表。本文,我们将根据这个解释结果将Tin标记转为html文件。 转为html的好处 第一,Tin标记语言作为一个小小小小小项目,光把编写…

34-《球兰》

球兰 球兰(学名:Hoya carnosa(L.f.)R. Br),又名:马骝解、狗舌藤、铁脚板等,马利筋亚科球兰属多年生植物 。攀援灌木,附生于树上或石上,茎节上生气根。分布于云…

单链表-数据结构

一、单链表 1.结构定义 typedef struct LNode {int data;struct LNode* next; }LNode, * LinkList; 2.功能实现 ①创造结点 //创造结点 LNode* NewNode(int x) {struct LNode* ret (LNode*)malloc(sizeof(LNode));ret->data x;ret->next NULL;return ret; } ②插…

TypeError: (0 , _xxx.default) is not a function

1.首先从控制台报错信息看很让人疑惑,好像并没有这个函数,我这里是引入了address.js这个这个文件里面的函数导致的 2. 直接说原因:导入的函数不是default,但使用的时候没有使用"{}" import xxx from yyy 3.直接加上&q…

Golang | Leetcode Golang题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; func minPatches(nums []int, n int) (patches int) {for i, x : 0, 1; x < n; {if i < len(nums) && nums[i] < x {x nums[i]i} else {x * 2patches}}return }

【vulnhub】Matrix:1靶机

靶机安装 下载地址&#xff1a;https://download.vulnhub.com/matrix/Machine_Matrix.zip 运行环境&#xff1a;VirtualBox 信息收集 靶机扫描 netdiscover -i eth0 -r 192.168.7.0/24 端口扫描&#xff0c;开放端口22、80、31337 nmap -A 192.168.7.203 -p- 目录扫描 d…

「C++系列」引用

文章目录 一、引用及定义引用的基本用法注意事项 二、引用与指针1. 定义和初始化2. 语法糖3. 空值4. 数组和函数5. 性能6. 用途 三、引用作为参数/返回值1. 把引用作为函数参数2. 把引用作为函数返回值 四、相关链接 一、引用及定义 在C中&#xff0c;引用&#xff08;Referen…