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

线程(操作系统408)

基本概念

我们说引入进程的目的是更好的使用多道程序并发执行,提高资源的利用率和系统吞吐量;而引入线程的目的则是减小程序在并发执行的时候所付出的时间开销,提高操作系统的并发性能

线程可以理解成"轻量级进程",它是CPU的基本执行单元(进程是操作系统的资源分配的基本单元)也是程序执行的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建或撤销另一个线程,同时一个进程间的多个线程可以并发执行(与进程十分相似)。线程也有就绪态,阻塞态和运行态这三种状态。

引入线程的概念之后,进程就只作为除了CPU以外的系统资源的分配单元(CPU会被分配给线程而不是进程),而线程则作为处理机的分配单元。由于一个进程内有多个线程,如果线程的切换发生在同一个进程里面,就只需要很少的时间开销(因为上下文保存的东西比进程少多了)。

与进程的比较

1.调度:

传统的操作系统中(就是没有线程的操作系统中),每次调度都需要进行上下文切换,开销非常大。而在同一个进程中,线程是独立调度的基本单位,而线程的切换代价远低于进程,因为在同一进程中,线程之间的切换不会引起进程之间的切换。

2.并发性:

在引入线程的操作系统中,不仅进程之间可以并发执行,一个进程的多个线程之间也可以并发执行,不同进程之间的不同线程也能并发执行。从而使操作系统具有更好的并发性,提高了系统资源的利用率和系统的吞吐量

3.拥有资源:

进程使系统中拥有资源的基本单位,而线程不拥有系统资源(只拥有一点必不可少、能保证独立运行的资源,比如说CPU时间片),但是线程可以访问其隶属进程的系统资源。

4.独立性:

每个进程都拥有独立的地址空间和资源,除了共享全局变量,不允许其他进程访问。某进程中的线程对其他进程不可见。同一进程中的不同线程是为了提高并发性以及进行相互之间的合作而创建的,他们共享进程的地址空间和资源

5.系统开销:

在创建或撤销进程的时候,系统都要为之分配或是回收进程控制块PCB以及其它资源,开销很大。而线程创建和撤销的时候需要管的只是一小部分的寄存器的内容,开销很小。此外,由于同一进程的多个线程共享进程的地址空间,因此这些线程之间的同步很容易实现,甚至不需要操作系统的干预。

6.支持多处理机系统:

对于传统单线程进程,不管有多少处理机,进程只能运行在一个处理机上面。而对于多线程的进程,可以把一个进程里面的不同线程分配给不同的处理机上面执行。

线程的属性

多线程操作系统中的进程以及不再是一个基本的执行实体,但是它仍然具有执行相关的状态。所谓的进程处于执行状态,也可以理解为这个进程内的某个线程正在执行。线程的主要属性如下:

  1. 线程是一个轻型实体,它不拥有资源,但每个线程都拥有一个唯一的标识符和一个线程控制块(进程也有一个唯一的标识符和进程控制块(PCB))线程控制块记录了线程执行的寄存器和栈等现场状态

  2. 不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用的时候,操作系统把他们创建成不同的线程

  3. 同一进程中的不同线程共享这个进程的所有资源

  4. 线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各个线程可以交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,如果各个CPU同时为一个进程的各线程服务,就可以缩短进程的处理时间

  5. 一个线程被创建后,便开始了它的生命周期,直到线程终止。线程在生命周期内会经历阻塞态,就绪态和运行态等各种状态的变化

线程的状态和状态切换

与进程十分相似,进程在运行的时候有三种基本状态,而线程也一样:

  1. 执行状态:线程已获得处理机而正在运行

  2. 就绪状态:线程已经具备各种执行条件,只需要再获得CPU便可以立即执行

  3. 阻塞状态:线程在执行中因某个事件受阻而处于暂停状态

线程这三种基本状态之间的转换和进程的基本状态之间的转换是一样的

线程的组织和控制

1.线程控制块:

与进程类似,系统也会给每个线程分配一个线程控制块TCB,用于记录控制和管理线程的信息。线程控制块通常包括:

  1. 线程标识符

  2. 一组寄存器

  3. 线程运行状态,用于描述线程正处于何种状态

  4. 优先级

  5. 线程专有存储区,线程切换的时候用于保存现场(线程上下文)

  6. 堆栈指针,用于过程调用时保存局部变量和返回地址等

同一进程的所有线程都完全共享进程的地址空间和全局变量。各个线程都可以访问进程地址空间中的每个单元,所以讲一个线程可以读、写甚至清楚另一个线程的堆栈

2.线程的创建:

线程也是有生命周期的,它由创建而产生,调度而执行,由终止而消亡。相应的,在操作系统中就有用于创建线程和终止线程的函数。

用户程序启动的时候,通常只有一个称为"初始化线程"的线程正在执行,这个线程的主要功能是创建新线程。等线程创建函数执行完之后,会返回一个线程标识符。

3.线程的终止:

当线程完成自己的任务之后,或者是出现了异常而需要强制终止的时候,由终止进程调用相应的函数执行种植操作。但有些线程一旦被建立,就会一直运行下去而不会终止。通常,线程被终止之后不会立即释放它所占有的资源,只有当进程中的其它线程执行了分离函数之后,被终止进程才会与资源分离,这个时候的资源才会被其它的线程利用。

被终止单还没有释放资源的线程仍然可以被其它的线程调用,被调用之后,这个线程会重新恢复运行。

线程的实现方式

线程的实现方式分为两类:用户级线程(ULT)和内核级线程(KLT),其中内核级线程又被称为内核支持的线程。

1.用户级线程(ULT):

用户级线程中,有关线程管理(创建,撤销)的所有工作都由应用程序在用户空间中完成,线程对于内核来说是透明的,内核不知道线程的存在,只看得到进程。应用程序可以通过使用线程库设计成多线程程序。通常,应用程序从单线程开始,在这个线程中开始运行,在运行中的任何时刻,可以通过调用线程库中的派生例程创建一个在相同进程中运行的新线程。

对于设置了用户级线程的系统,其调度仍然是以进程为单位的(毕竟内核看不到你的线程),各个进程轮流执行一个时间片。

优点

  1. 线程之间的切换不需要转换到内核空间,减少开销

  2. 调度算法可以是进程专用的,不同的进程可以根据自己的需要,对自己的线程选择不同的调度算法

  3. 用户及线程的实现与操作系统平台无关,对线程管理的代码库是属于用户程序的一部分

缺点

  1. 系统效用的阻塞问题,当线程执行一个系统条用被阻塞的时候,整个进程都被阻塞了,这个进程里面的其它线程是不能去执行的

  2. 不能发挥多处理机优势,毕竟内核又看不到你线程,咋让多个处理机处理同一个进程内的多个线程?

 

 

2.内核级线程(KLT):

操作系统中,无论是系统进程还是用户进程,都是在系统内核的支持下运行的,与内核紧密相关。内核级线程同样也是在内核的支持下运行的,线程管理的所有工作也是在内核空间内实现的。内核空间也为每个内核级线程设置一个线程控制块,内核根据控制块感知某线程的存在,并对线程加以控制。

优点

  1. 能发挥多处理机的优势。多个处理机能够同时处理一个进程的不同线程

  2. 如果进程中的一个线程被阻塞了,还有其它的线程可以被执行

  3. 内核支持县城具有很小的数据结构和堆栈,线程切换比较快

  4. 内核本身也可以采用多线程技术,可以提高系统的执行速度和效率

缺点

  1. 同一进程中的线程切换,需要从用户态转到核心态进行系统开销较大。这是因为用户进程的线程在用户态进行,而线程调度是在核心态实现的。

 

3.组合方式:

把上述两个方法结合起来,内核支持多个内核级线程的建立、调度和管理,同时也允许用户程序建立、调度和管理用户级线程。一些内核级线程对应多个用户级线程,这是用户级线程通过时分多路复用内核级线程实现的。同一进程中的多个线程也可以同时在多处理机上面并行执行,且在一个线程阻塞的时候不会导致整个进程阻塞。

线程实现方式的介绍中,提到了通过线程库来创建和管理线程。线程库是为程序员提供创建和管理线程的API。实现线程库的主要方法为以下两种:

  1. 在用户空间中提供一个没有内核支持的库。这个库的所有代码和数据结构都位于用户空间中,这意味着,调用库内的一个函数只导致用户空间中的一个本地函数的调用

  2. 实现由操作系统直接支持的内核级的一个库。对于这种情况,库内的代码和数据结构都在内核空间内。调用库中的API通常会导致对内核的系统调用。

 

多线程模型

有些系统同时支持用户级线程和内核级线程,由于用户级线程和内核级线程的连接方式的不同,从而形成了下面三种不同的多线程模型:

1.多对一模型:

讲多个用户级线程映射到一个内核级线程。这些用户级线程一般属于一个进程,线程的调度和管理在用户空间完成。只有当用户线程访问内核的时候,才将其映射到一个内核级线程上,但是每次只允许一个线程进行映射。

优点:线程管理在用户空间中进行,效率比较高

缺点:如果一个线程发生了阻塞,整个进程都会被阻塞;不支持多处理机的分布式运行

 

 

2.一对一模型:

将每个用户级线程映射到一个内核级线程

优点:当一个线程被阻塞之后,允许调度另一个线程运行

缺点:每创建一个用户级线程,就要创建一个内核级线程,开销较大

 

 

3.多对多模型:

将n个用户级线程映射到m个内核级线程上,要求n≥m。

克服了多对一模型并发度不高的缺点,又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。此外,还拥有上面两个模型各自的优点。

 

相关文章:

线程(操作系统408)

基本概念 我们说引入进程的目的是更好的使用多道程序并发执行,提高资源的利用率和系统吞吐量;而引入线程的目的则是减小程序在并发执行的时候所付出的时间开销,提高操作系统的并发性能。 线程可以理解成"轻量级进程",…...

功耗降低99%,Panamorph超清VR光学架构解析

近期,投影仪变形镜头厂商Panamorph获得新型VR显示技术专利(US11493773B2),该专利方案采用了紧凑的结构,结合了Pancake透镜和光波导显示模组,宣称比传统VR方案的功耗、发热减少99%以上,可显著提高…...

【数据结构】带你深入理解栈

一. 栈的基本概念💫栈是一种特殊的线性表。其只允许在固定的一端进行插入和删除元素的操作,进行数据的插入和删除的一端称作栈顶,另外一端称作栈底。栈不支持随机访问,栈的数据元素遵循后进先出的原则,即LIFO&#xff…...

认识CSS之如何提高写前端代码的效率

🌟所属专栏:前端只因变凤凰之路🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该系列将持续更新前端的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章简…...

Vue中watch和computed

首先这里进行声明,这个讲的是vue2的内容,在vue3发生了什么变动与此无关 这里是官网: https://v2.cn.vuejs.org/v2/guide/installation.html computed > 计算属性 watch > 侦听器(也叫监视器) 其区别如下&…...

华为鲲鹏+银河麒麟v10 安装 docker-ce

设备:硬件:仅有ARM处理器,无GPU和NPU,操作系统麒麟银河V10,Kunpeng-920 #######参考原链接######### 华为鲲鹏银河麒麟v10 安装 docker-ce 踩坑 - akiyaの博客 在 arm64(aarch64) 架构服务器上基于国产化操作系统安…...

Lambda,Stream,响应式编程从入门到放弃

Lambda表达式 Java8新引入的语法糖 Lambda表达式*(关于lambda表达式是否属于语法糖存在很多争议,有人说他并不是语法糖,这里我们不纠结于字面表述)*。Lambda表达式是一种用于取代匿名类,把函数行为表述为函数式编程风…...

C语言枚举使用技巧

什么是C语言枚举 C语言枚举是一种用户自定义数据类型,它允许程序员定义一个变量,并将其限制为一组预定义的常量。这些常量被称为“枚举值”,并且可以通过名称进行引用。 在C语言中,枚举值是整数类型,它们的值默认从0…...

保姆级使用PyTorch训练与评估自己的EfficientNetV2网络教程

文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…...

【9】基础语法篇 - VL9 使用子模块实现三输入数的大小比较

VL9 使用子模块实现三输入数的大小比较 【报错】官方平台得背锅 官方平台是真的会搞事情,总是出一些平台上的莫名其妙的错误。 当然如果官方平台是故意考察我们的细心程度,那就当我没有说!! 在这个程序里,仿真时一直在报错 错误:无法在“test”中绑定wire/reg/memory“t…...

成功的项目管理策略:减少成本,提高质量

项目管理是一项具有挑战性的任务,项目团队需要合理的规划和策略,以确保项目的成功和达成预期。为了实现项目的成功,项目经理必须采用正确的策略,才能以最大限度地减少成本并提高项目质量。本文将探讨成功的项目管理策略&#xff0…...

centos 7下JDK8安装

下载安装包https://www.oracle.com/java/technologies/downloads/#java8-linux上传路径 /usr/local(替换为自己需要安装的路径)解压tar -zxvf jdk-8u131-linux-x64.tar.gz配置环境变量[rootlocalhost java]# vi /etc/profile添加如下配置在配置文件最后&…...

datatables.js中文项目使用案例

官方下载地址https://datatables.net/download/中文官网&#xff1a;http://datatables.club/资源引用<link href"~/datatables/datatables.min.css" rel"stylesheet" /> <script src"~/jquery.min.js" type"text/javascript"…...

Hadoop小结

Hadoop是什么Hadoop是一 个由Apache基金 会所开发的分布式系统基础架构。主要解决,海量数据的存储和海量数据的分析计算问题。广义上来说&#xff0c;Hadoop通 常是指一个更广泛的概念一Hadoop 生态圈。Hadoop优势Hadoop组成HDFS架构Hadoop Distributed File System&#xff0c…...

经典卷积模型回顾14—vgg16实现图像分类(tensorflow)

VGG16是由牛津大学计算机视觉小组&#xff08;Visual Geometry Group&#xff09;开发的深度卷积神经网络模型。其结构由16层组成&#xff0c;其中13层是卷积层&#xff0c;3层是全连接层。 VGG16被广泛应用于各种计算机视觉任务&#xff0c;如图像分类、目标检测和人脸识别等。…...

#Vue2篇:keep-alive的属性和方法

定义 keep-alive 组件是 Vue.js 内置的一个高阶组件&#xff0c;用于缓存其子组件&#xff0c;以提高组件的性能和响应速度。 除了基本用法之外&#xff0c;它还提供了一些属性和方法&#xff0c;以便更好地控制缓存的组件。 属性 include属性用于指定哪些组件应该被缓存&a…...

webpack指南(项目篇)——webpack在项目中的运用

系列文章目录 webpack指南&#xff08;基础篇&#xff09;——手把手教你配置webpack webpack指南&#xff08;优化篇&#xff09;——webpack项目优化 文章目录系列文章目录前言一、配置拆分二、修改启动命令三、定义环境变量四、配置路径别名总结前言 前面我们对webpack的基…...

unicode字符集与utf-8编码的区别,unicode转中文工具、中文转unicode工具(汉字)

在cw上报的报警信息中&#xff0c;有一个name字段的值是\u4eba\u4f53 不知道是啥&#xff0c;查了一下&#xff0c;是unicode编码&#xff0c;用下面工具转换成汉字就是“人体” 参考文章&#xff1a;https://tool.chinaz.com/tools/unicode.aspx 那么我很好奇&#xff0c;uni…...

3D数学系列之——再谈特卡洛积分和重要性采样

目录一、前篇文章回顾二、积分的黎曼和形式三、积分的概率形式&#xff08;蒙特卡洛积分&#xff09;四、误差五、蒙特卡洛积分计算与收敛速度六、重要性采样七、重要性采样方法和过程八、重要性采样的优缺点一、前篇文章回顾 在前一篇文章3D数学系列之——从“蒙的挺准”到“蒙…...

Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总

目录前言一、引发错误来源二、解决方案2-1、解决方案一&#xff08;检查变量&#xff09;2-2、解决方案二&#xff08;使用 [] 而不是 None&#xff09;2-3、解决方案三&#xff08;设置默认值&#xff09;2-4、解决方案四&#xff08;使用异常处理&#xff09;2-5、解决方案五…...

VMware空间不足又无法删除快照的解决办法

如果因为快照删除半路取消或者失败&#xff0c;快照管理器就不再显示这个快照&#xff0c;但是其占用的空间还在&#xff0c;最终导致硬盘不足。 可以百度到解决方案&#xff0c;就是在快照管理器&#xff0c;先新建一个&#xff0c;再点删除&#xff0c;等待删除完成就可以将…...

类和对象(一)

类和对象&#xff08;一&#xff09; C并不是纯面向对象语言 C是面向过程和面向对象语言的&#xff01; 面向过程和面向对象初步认识&#xff1a; C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基…...

Java 不同路径

不同路径中等一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。问总共有多少条不同的路径&#xff1f…...

【SAP PO】X-DOC:SAP PO 接口配置 REST 服务对接填坑记

X-DOC&#xff1a;SAP PO 接口配置 REST 服务对接填坑记1、背景2、PO SLD配置3、PO https证书导入1、背景 &#xff08;1&#xff09;需求背景&#xff1a; SAP中BOM频繁变更&#xff0c;技术人员在对BOM进行变更后&#xff0c;希望及时通知到相关使用人员 &#xff08;2&…...

最新研究!美国爱荷华州立大学利用量子计算模拟原子核

爱荷华州立大学物理学和天文学教授James Vary&#xff08;图片来源&#xff1a;网络&#xff09;美国爱荷华州立大学物理学和天文学教授James Vary和来自爱荷华州立大学、马萨诸塞州塔夫茨大学&#xff0c;以及美国能源部加利福尼亚州劳伦斯伯克利国家实验室的研究人员&#xf…...

零入门kubernetes网络实战-22->基于tun设备实现在用户空间可以ping通外部节点(golang版本)

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是想做一个测试&#xff1a; 实现的目的是 希望在宿主机-1上&#xff0c;在用户空间里使用ping命令发起ping请求&#xff0c;产生的icmp类型的…...

web安全——Mybatis防止SQL注入 ssrf漏洞利用 DNS污染同源策略

目录 0x01 Mybatis防止SQL注入 0x02 sqlmap中报错注入判断 0x03 ssrf漏洞利用 0x04 SSRF重绑定 0x05 DNS污染...

smp_init过程解析

当你看到这样的log&#xff0c;会不会很慌张&#xff1f;竟然由CPU没有启动成功&#xff0c;除了什么故障&#xff1f;本文将结合我遇到的一个问题&#xff0c;将启动过程中bringup secondary cpu的过程分析一下。smp_init代码如下&#xff1a;602 void __init smp_init(void) …...

判断推理之逻辑判断

考点一翻译推理&#xff08;一&#xff09;题目特征题干或选项中出现多组“逻辑关联词”&#xff0c;如&#xff1a;“如果……那么……”、“只要……就……”、“只有……才……”、“所有”、“有些”、“……且……”、“ ……或……”等典型逻辑关联词。&#xff08;二&am…...

2023金三银四常见Handler面试总结,附带答案

以下的Handler的面试题都是在面试过程中总结出来比较常见的面试题&#xff0c;现在分享给大家&#xff0c;希望可以帮助你们&#xff01;1.Handler的实现原理从四个方面看Handler、Message、MessageQueue 和 Looper Handler:负责消息的发送和处理 Message:消息对象&#xff0c;…...

广告联盟网站建设/郑州百度分公司

CSBG&#xff08;China SAPBasis Group&#xff09;建站公告 关于CSBG:CSBG的含义为&#xff08;China SAP Basis Group&#xff09;。本站的创建主要目的为&#xff0c;为广大的Basis提供一个绝对知识专业&#xff0c;知识易查&#xff0c;用户粘度高的知识交流分享平台&#…...

道滘东莞微信网站建设/大兴今日头条新闻

要通过canvas实现对图片沿x轴或者颜色y轴实现翻转&#xff0c;我们可以通过canvas2d的接口进行实现。 使用到的api&#xff1a; 使用getContext来获取canvas2d对象 使用 canvas2d对象的scale方法进行翻转 由于翻转的xy轴使用的是原点&#xff0c;也就是canvas的左上角的位置的…...

网站备案信息/汕头seo关键词排名

新开个系列&#xff0c;我发现我记忆力不好&#xff0c;学过的东西太容易忘&#xff0c;一会搞搞Deep learning&#xff0c;一会搞搞优化一会搞搞SLAM每次都得重新看&#xff0c;搞个专栏是个不错的笔记方式。而且SLAM中还是会用到并发的知识的。1.入门1 概念解释。并发Concurr…...

四川华远建设工程有限公司网站/武汉推广系统

目录 题目 思路 考点 Code 题目 有一堆长方体积木,它们的长度和宽度都相同,但长度不一。 小橙想把这堆积木叠成一面墙,墙的每层可以放一个积木,也可以将两个积木拼接起来,要求每层的长度相同。 若必须用完这些积木,叠成的墙最多为多少层? 如下是叠成的一面墙的图示,…...

做网站沧州/微信营销的特点

导读&#xff1a;蜜蜂把蜜脾建在上方&#xff0c;子脾建在下方&#xff0c;根据蜂部落的观察&#xff0c;蜜蜂并不是一定把蜜脾建在上方&#xff0c;应该说不同的蜂箱蜜蜂造脾方式不一样吧&#xff0c;而土法取蜜全部刮掉不利于蜂群繁殖&#xff0c;也不是说一定不利于蜂群繁殖…...

品牌注册名字大全/金华seo全网营销

1 准备 LNMP 环境 LNMP 是 Linux、Nginx、MySQL 和 PHP 的缩写&#xff0c;是 WordPress 博客系统依赖的基础运行环境。我们先来准备 LNMP 环境中的MySQL。 1.2 安装mysql CentOS7的yum源中默认好像是没有mysql的。为了解决这个问题&#xff0c;我们要先下载mysql的repo源。…...