多线程(概念介绍)

news2024/11/18 20:30:23

概念

首先,我们引入一些基本的概念,并结合我们以前所学过的知识,初步对这些概念有个大体的理解

1.线程是一个执行分支,执行粒度比进程更细,调度成本更低
2.线程是进程内部的一个执行流
3.线程是CPU调度的基本单位,进程是承担分配系统资源的基本实体

理解

怎么理解这些概念呢?线程又和我们当初所学的进程有什么区别呢?
我们先来看一下,我们之前是怎么理解进程的?
我们执行一段代码,对应的就是一个进程被创建,每个进程有着自己对应的虚拟地址空间(4GB),然后通过页表,将相应的代码和数据,映射到对应的物理内存之中
当然每个进程还会创建相应的PCB,在linux系统下,为task_struct结构体进行管理进程
在这里插入图片描述
如果有多个进程,其实只是复制上面的流程,原模原样的拷贝,一点都没有变化,创建一个子进程也是如此,最多发生写时拷贝,让各自的数据私有化,但都会有各自的PCB,也就是task_struct
但是假如现在情况变了呢?
有多个task_struct指向同一个虚拟地址空间,这些task_struct没有自己单独的虚拟地址空间
在这里插入图片描述
有了这样的结构,正文代码假如存在多个函数,就可以将任务分派出去,让每个task_struct分别负责不同的函数,由原来的串发执行,变为并发执行
我们就把这几个task_struct称之为一个单独的线程
现在我们就可以理解上面所说的概念了
执行粒度比进程更细

因为每个pcb负责的只是当初任务的一小部分,而进程则是一整个大任务,所以自然粒度更细

线程是进程内部的一个执行流(执行分支)

一个线程在进程的地址空间内运行,该线程是隶属于进程

调度成本更低

1.当CPU执行OS的代码时,会检测对应的PCB,然后发现对应的虚拟地址空间等等都是完全相同的,那就不再需要切换相应的地址空间和页表,那自然成本更低
2.CPU内部存在硬件cache l1,l2,l3,该硬件的功能就是提前将部分热点数据和代码保存起来(预加载),这样就不用直接从物理内存中加载,CPU从cache中获取对应的代码即可
而有了线程,不用再对cache进行切换

更新概念

那我们如何看待task_struct呢?毕竟我们之前一直把它看作是一个进程的标志,一个进程,必定对应一个task_struct
答案是PCB既不是线程也不是进程,而是一个执行流
一个进程包括所有一大堆的东西,每个进程有自己的CPU资源,有自己的地址空间,有自己的页表等等
进程是承担分配系统资源的基本实体

所以进程的作用,就是把代码和数据加载到内存,让0S为该可执行程序申请所匹配的所有资源

那我们之前所提到的进程概念都是错的吗?
并不是,以前所谈的进程只是单纯内部只有一个task_struct(一个执行流)而已,其余都没有变化

Windows系统线程对比

但是并非所有操作系统都是这样实现的,Windows操作系统线程的实现就和Linux操作系统线程的实现不同
但无论是哪个操作系统,都需要满足上面所述的线程的概念
它就是类似于一个标准,但具体怎么实现,根据操作系统的不同而不同
就好比我们平时学校说的好学生,成绩优异,作风端正等等,这些评价体系都是相同的,但是落实到每个学校又会有所不同,比如A学校要求成绩前3,才算成绩优异;但是B学校要求成绩前10,就已经算成绩优异了
因此,充分理解规范非常重要

1.线程是一个执行分支,执行粒度比进程更细,调度成本更低
2.线程是进程内部的一个执行流
3.线程是CPU调度的基本单位,进程是承担分配系统资源的基本实体

既然线程是进程内部的一个执行流,那线程的数目必定是大于进程的数目
所以线程也需要进行管理和组织
Windows系统采取的是模仿PCB结构,定义了一个TCB(线程控制块)的数据结构,隶属于进程PCB
用TCB来控制和调度线程
也就是说Windows内核里面有真线程
但是可想而知,这样会带来很多麻烦,线程与线程之间需要进行管理,进程与线程之间需要进行管理等等
但是Linux内核的设计者采取的却是完全不同的策略
线程和进程两者本身就有很多相似之处,并不需要重零开始构建一套全新的体系,我直接复用PCB结构体,用PCB模拟线程的TCB
Linux没有真正意义上的线程,而是用进程方案模拟的线程
复用代码和结构,最明显的一个优势就是简单!
假如存在TCB,就需要有TCB自己的管理体系,而TCB隶属于PCB,则PCB又要对TCB进行管理
但现在就只有PCB,一切都是原来进程的体系进行设计
所以更好维护,效率更高,也更安全,这就是为什么Linux操作系统可以不间断的运行!即便硬件损坏,可能Linux操作系统也还没挂,但是Windows操作系统,也就是我们平时用的电脑,假如一直开机,不用三天,可能就会出现故障
因为执行流<=进程,因此Linux系统又把线程(执行流)称作为LCB轻量级进程,对应英文Light Weight Process

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

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

相关文章

PLSQL使用技巧

连接配置 先找到配置文件tnsnames.ora地址 我的是这个&#xff08;仅供参考&#xff09;&#xff1a;D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora IC (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 127.0.0.1)(PORT 1521)))(CONNECT_DATA…

易基因:ChIP-seq揭示组蛋白修饰H3K27me3调控高温下棉花的雄性不育机制|Plant Com

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 气候变化导致极端天气事件更加频繁地发生&#xff0c;包括反常的高温&#xff08;high temperature&#xff0c;HT&#xff09;&#xff0c;HT胁迫对作物的生长发育和产量有严重的负面影…

只需一个简单操作,保障企业电力供应安全性!

随着现代社会对电力供应的不断依赖&#xff0c;不间断电源&#xff08;UPS&#xff09;系统已经成为各种行业的关键基础设施之一。然而&#xff0c;UPS系统的性能监控和管理同样至关重要&#xff0c;以确保它们在需要时能够如期发挥作用。 客户案例 广东某公司是一家制造企业&a…

[python 刷题] 11 Container With Most Water

[python 刷题] 11 Container With Most Water 题目&#xff1a; You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together with th…

如何快速学习AdsPower RPA(2)——中级、高级部分

Tool哥继续给大家分享快速学习AdsPower RPA的方法。上一篇在这里&#xff0c;还没看过的小伙伴赶快补课去&#xff1a;如何快速学习AdsPower RPA&#xff08;1&#xff09;——简单、进阶部分 能进入到中级、高级阶段的学习&#xff0c;说明你自学能力超强&#xff01;只要跟着…

联想详解AI导向基础设施 “软硬一体”赋能四大场景

9月25日&#xff0c;联想在杭州举办以“全栈智能 全程陪伴”为主题的新IT思享会&#xff0c;集中展示了联想基于新IT架构的全栈智能产品与服务&#xff0c;引领行业智能变革的强大实力。 当前&#xff0c;以ChatGPT为代表的AI模型席卷全球&#xff0c;不仅实现了AI技术质变性突…

在 Kubernetes 环境中实现证书管理的自动化

原文作者&#xff1a;Jason Schmidt - F5 NGINX 解决方案架构师 原文链接&#xff1a;在 Kubernetes 环境中实现证书管理的自动化 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 有效的 SSL/TLS 证书是现代应用环境的核心要求。但…

Unity制作旋转光束

Unity制作旋转光束 大家好&#xff0c;我是阿赵。 这是一个在很多游戏里面可能都看到过的效果&#xff0c;在传送门、魔法阵、角色等脚底下往上散发出一束拉丝形状的光&#xff0c;然后在不停的旋转。 这次来在Unity引擎里面做一下这种效果。 一、准备材料 需要准备的素材很简…

Django之视图

一&#xff09;文件与文件夹 当我们设定好一个Djiango项目时&#xff0c;里面会有着view.py等文件&#xff0c;也就是文件的方式&#xff1a; 那么我们在后续增加app等时&#xff0c;view.py等文件会显得较为臃肿&#xff0c;当然也根据个人习惯&#xff0c;这时我们可以使用…

Linux下ebtables和iptables

ebtables Ebtables has three tables: filter, nat and broute. The broute table has the BROUTING chain.The filter table has the FORWARD, INPUT and OUTPUT chains.The nat table has the PREROUTING, OUTPUT and POSTROUTING chains. iptables Tables↓/Chains→PREROU…

线上展示越发流行的今天,数字展厅发展有哪些趋势

引言&#xff1a; 二十一世纪的今天&#xff0c;数字化技术在不断的进步&#xff0c;数字展厅也逐渐出现在人们眼前&#xff0c;并成为了现代展示和推广的重要工具。 一&#xff0e;快速了解数字展厅 数字展厅是一种利用数字技术创建的虚拟展示空间&#xff0c;它通过虚拟现实…

Go-Ldap-Admin | Ldap 同步钉钉、企业微信、飞书组织架构实践和部分小坑

目录 一、Docker-compose快速拉起demo测试环境 二、原生部署流程 安装MySQL&#xff1a;5.7数据库 安装openLDAP 修改域名&#xff0c;新增con.ldif 创建一个组织 安装OpenResty 下载后端 下载前端 部署后端 部署前端 三、管理动态字段 钉钉 企业微信 飞书 四、…

GPT如何避免从入门到放弃(一)——认识GPT

第一讲&#xff1a;认识GPT GPT的全称&#xff1a;Generative Pre-trained Transformer——生成式 预训练 变换模型 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer架构的大型语言模型。它由OpenAI开发&#xff0c;并在不同版本中不断…

QQ怎么上传大于1G的视频啊?视频压缩这样做

当我们想要在QQ上分享一段大容量的视频时&#xff0c;往往会因为超过1G的限制而感到无助。不过&#xff0c;不用担心&#xff0c;今天我们将为你介绍三种可以压缩视频大小的方法&#xff0c;一起来看看吧~ 一、嗨格式压缩大师 嗨格式压缩大师是一款专业的视频压缩软件&#xf…

Multisim14.0仿真(二十四)石英晶体多谐振荡器

一、仿真原理图&#xff1a; 二、仿真效果图&#xff1a;

基于Vue+ELement实现增删改查案例与表单验证

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

航天与航空的区别,今天终于弄清楚啦!

航天与航空的区别 一&#xff1a;什么是航天&#xff1f; 航天的由来 航天(Spaceflight)&#xff0c;又称空间飞行、太空飞行、宇宙航行或航天飞行&#xff0c;是指进入、探索、开发和利用太空(即地球大气层以外的宇宙空间&#xff0c;又称外层空间)以及地球以外天体各种活动…

Java高级应用——异常处理

文章目录 异常处理概念Java异常体系Error 和 Exception编译时异常和运行时异常Java异常处理的方式 异常处理 概念 异常处理是在程序执行过程中遇到错误或异常情况时的一种机制&#xff0c;它允许程序在错误发生时进行适当的处理&#xff0c;而不会导致程序崩溃或产生不可预测…

pdf怎么调整大小kb?pdf文件过大这样压缩

在日常的工作和生活中&#xff0c;我们常常会遇到需要调整PDF文件大小的问题。有时候&#xff0c;我们需要将大型的PDF文件上传到某些平台&#xff0c;但平台的限制让我们不得不压缩文件的大小。那么&#xff0c;如何有效地调整PDF文件的大小呢&#xff1f; 一、使用嗨格式压缩…

第三方开源测试框架 pytest

本篇文章是聊聊 Python 的单元测试框架&#xff0c;在Python 世界中最火的第三方单元测试框架&#xff1a;pytest。 它有如下主要特性&#xff1a; assert 断言失败时输出详细信息&#xff08;再也不用去记忆 self.assert* 名称了&#xff09;自动发现 测试模块和函数模块化夹…