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

缺点:

        缺乏访问控制(后续会学互斥,同步,信号量来解决这一问题)

完。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

突破编程界限:探索AI编程新境界

文章目录 一、AI编程助手1.1 Baidu Comate智能代码助手1.2 阿里云 通义灵码 二、场景需求三、体验步骤3.1 官网下载3.2 手动下载 四、试用感受4.1 提示4.2 注释生成代码4.3 代码生成4.4 选中生成注释4.5 查看变更&新建文件4.6 调优建议4.7 插件使用 五、结尾推荐 一、AI编程…

XMind 2021 v11.1.2软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; XMind 2021 v11.1.2被誉为顶尖思维导图工具&#xff0c;以其简洁、整洁的界面和直观的功能布局脱颖而出。尽管软件体积小巧&#xff0c;却极具强大功…

第七届精武杯部分wp

第一部分&#xff1a;计算机和手机取证 1.请综合分析计算机和手机检材&#xff0c;计算机最近一次登录的账户名是 答案&#xff1a;admin 创建虚拟机时直接给出了用户名 2. 请综合分析计算机和手机检材&#xff0c;计算机最近一次插入的USB存储设备串号是 答案&#xff1a…

Linux:文件IO

Linux&#xff1a;文件IO C语言 文件IOfopen Linux 文件IOopen接口close接口write接口read接口 内存文件管理struct filestruct files_struct文件描述符 fd 缓冲区 C语言 文件IO 在正式讲解Linux中是如何对文件进行IO前&#xff0c;我们先简单回顾以下C语言中&#xff0c;是如…

AWS云优化:实现性能和成本的最佳平衡

随着企业数字化转型的加速&#xff0c;对云计算平台的需求也不断增长。AWS作为云计算行业的领导者之一&#xff0c;提供了广泛的云服务和解决方案&#xff0c;帮助企业实现业务的创新和发展。在AWS云上部署应用程序和服务后&#xff0c;对其进行优化是至关重要的&#xff0c;以…

ECharts系列文章汇总(持续更新中)

ECharts介绍 ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;提供了直观、生动、可交互、可个性化定制的数据可视化图表。以下是关于ECharts的详细介绍&#xff1a; 发展历程&#xff1a; ECharts最初由百度团队开源&#xff0c;并在2018年初捐赠给Apache基金会&…

【联通支付注册/登录安全分析报告】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

Hierarchical File Systems are Dead——论文泛读

HotOS 2009 Paper 分布式元数据论文阅读笔记整理 问题 文件系统一直采用分层名称空间&#xff0c;随着用户与越来越多的数据交互&#xff0c;并且对搜索能力的要求越来越高&#xff0c;这样一个简单的分层模型已经过时了。例如&#xff0c;查找照片时&#xff0c;用户描述他们…

500元以内的蓝牙耳机品牌怎么选?五大优质品牌汇总

无论是通勤途中、学习间隙还是运动时&#xff0c;一款性能出众、价格亲民的蓝牙耳机都能为我们带来极致的听觉享受&#xff0c;然而面对市场上琳琅满目的品牌和型号&#xff0c;如何选择一款500元以内的优质蓝牙耳机&#xff0c;相信大家都会有这个难题&#xff0c;今天为了帮助…

欢乐钓鱼大师辅助,2024年攻略大全!

在探索欢乐钓鱼大师的世界时&#xff0c;成功的关键在于全面考虑各种影响钓鱼效果的因素。以下是五大关键要素&#xff0c;掌握它们&#xff0c;你也能成为一名钓鱼高手&#xff01; 一、黄金钓点&#xff1a;位置决定一切 选择正确的钓点至关重要。考虑湖泊、河流和小溪的水深…

HCIP综合实验

1.拓扑 2.需求分析 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4与其他所有直连设备间均使用公有IP。 2、R3、R5、R6、R7为MGRE环境&#xff0c;R3为中心站点。 3、整个OSPF环境IP地址基于172.16.0.0/16划分。 4、减少LSA的更新量&#xff0c;加快收敛&#xf…

Shuffle Cards (STL rope平衡树库)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例1&#xff1a; 输入 5 1 2 3 输出 2 3 4 1 5 样例2&#xff1a; 输入 5 2 2 3 2 3 输出 3 4 1 2 5 样例3&#xff1a; 输入 5 3 2 3 1 4 2 4输出 3 4 1 5 2 思路&#xff1a; 这道题&…

什么是翘尾因素

在有关CPI 的分析文章和新闻稿件中&#xff0c;经常会出现“翘尾因素”或“翘尾影响” 等词汇&#xff0c;这是分析同比价格指数变动幅度时所特有的概念。那么什么是“翘尾因素” 或“翘尾影响”呢&#xff1f; 一、什么是翘尾因素 “翘尾因素”是指上年价格上涨&#xff08;…

线程池原理简谈

1&#xff0c;概述 线程池是一种池化技术&#xff0c;本质是减少线程对象创建销毁的开销&#xff0c;同对象池、连接池一样&#xff0c;达到对象复用的效果。那么线程池怎么复用呢&#xff1f;即一个或多个Thread对象怎么执行更多的Task&#xff1f;这里面的关键就涉及到了阻塞…

关于各类软件下载及使用

文章目录 一、VS Code1、下载2、安装3、使用 二、Dev-C1、下载2、安装3、使用 三、VS20191、下载2、安装3、使用 四、IDEA1、下载2、安装3、使用 五、Fiddler1、下载1.1 官网下载1.2 文件下载 2、安装3、使用 一、VS Code 1、下载 2、安装 3、使用 二、Dev-C 1、下载 2、…

万能自定义表单系统源码开源版 支持普通表单、付费报名、预约服务等三合一功能

源码简介 高效、灵活地收集和管理数据对于各项运营和决策至关重要&#xff0c;方便了各行业对数据收集的多样化需求。分享一个万能自定义表单系统源码开源&#xff0c;该系统拥有强大的自定义功能和广泛的适用性&#xff0c;支持普通表单、付费报名、预约服务等三合一功能。 …

vuex核心概念-getters

除了state之外&#xff0c;有时我们还需要从state中派生出一些状态&#xff0c;这些状态是依赖state的&#xff0c;此时会用到getters。

pod介绍

一、前言 Pod 是 Kubernetes 中最小的部署单元&#xff0c;它可以包含一个或多个容器&#xff0c;以及共享的存储卷和网络命名空间&#xff0c;Pod 提供了一种抽象&#xff0c;用于组织和管理容器化的应用程序&#xff0c;并提供了一种灵活、轻量级的方式来部署和管理应用程序 …

【电容】芯片旁边为什么要接0.1uf(100nF)电容,退耦电容是什么意思,为什么要大电容并小电容

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 ** 一般芯片旁边为什么都会放一个小电容&#xff0c;而且大部分情况下都是100nF ** 1、为什么要放这个电容 首先我们知道这个…

笨方法自学python(五)-字符串和文本

字符串和文本 在这章习题中我们将使用复杂的字符串来建立一系列的变量&#xff0c;从中你将学到它们的用途。首先我们解释一下字符串是什么 东西。 字符串通常是指你想要展示给别人的、或者是你想要从程序里“导出”的一小段字符。Python 可以通过文本里的双引号 " 或者单…