进程与线程(二)线程相关

news2024/9/22 2:03:39

目录

  • 一. 基本概念
  • 二. 线程与进程的比较
  • 三. 线程的属性
  • 四. 线程的状态与切换
  • 五. 线程的组织与控制
    • 线程控制块(TCB)
    • 线程创建
    • 线程终止
  • 六. 线程的实现方式
    • 用户级线程(User-Level-Thread,ULT)
    • 内核级线程(Kernel-Level-Thread,KLT)
    • 组合方式
  • 七. 多线程模型
    • 多对一模型
    • 一对一模型
    • 多对多模型

进程 的引入是为了更好地使多道程序并发执行,提高资源利用率和系统吞吐量;
线程(Threads) 的引入是为了减小程序在并发执行时付出的时空开销,提高操作系统并发性能。

一. 基本概念

  • 线程: ---->轻量级的进程,是一个基本的CPU执行单元,也是程序执行流的最小单元
  • 结构:由线程ID,程序计数器(PC),寄存器集合,堆栈 组成

线程是进程中的一个实体,是被系统独立调度和分派的基本单位

  • 线程特点
    • 线程本身不拥有系统资源只拥有一点儿运行中必不可少的资源,可以于同属一个进程的线程共享进程的全部资源
    • 一个线程可以创建,撤销另一个线程,同一个进程的线程之间可以并发执行。
    • 线程之间的相互制约,使得 线程呈现出间断性
    • 线程也具有:就绪,阻塞,运行三种基本状态。

引入线程后进程内涵变为:只作为除CPU以外的系统资源的分配单元线程成为CPU的分配单元
一个进程内部发生线程切换只需要消耗较少的时空开销。

二. 线程与进程的比较

  • 调度
    • 进程的调度上下文切换开销大
    • 线程切换代价远低于进程
    • 同一进程中,线程切换不会引起进程切换;但不同进程的线程切换会引起进程切换。
  • 并发性:
    • 引入线程后,不仅不同进程可以并发执行;同一个进程的多个线程可以并发执行,不同进程的线程可以并发执行

使得操作系统并发性更好,提高了资源利用率和系统吞吐量。

  • 拥有资源:
    • 进程是OS中拥有系统资源的最基本单位,线程不具有系统资源
    • 线程可以访问隶属进程的系统资源:表现在同一个进程的不同线程具有相同的地址空间。
  • 独立性:
    • 每个进程具有独立的地址空间和资源,除了共享全局变量,不允许其他进程访问。
    • 每个进程的线程对其他进程不可见。
  • 系统开销:
    • 创建/撤销进程时,系统需要分配和回收PCB以及其他资源,开销大。
    • 线程的创建/撤销 和 切换 开销很小。因此线程之间的同步与通信容易实现,甚至无需OS干预。
  • 支持多处理器系统:
    • 传统单线程进程:不管多少个CPU,进程只能运行在一个CPU上
    • 多线程进程:可以将进程的多个线程分配到多个CPU上执行。

三. 线程的属性

  • 线程是一个轻型实体,每个线程都有一个唯一标识符和一个线程控制块(记录线程执行的寄存器和栈结构等状态)
  • 不同的线程可以执行相同的程序。【一个程序被多个用户调用时,OS将它们创建成不同的线程】
  • 一个进程中线程共享该进程的资源
  • 线程是CPU的独立调度单位。【单个CPU:多线程交替占用CPU;多个CPU:各个线程可以同时占用不同CPU】
  • 线程创立后,会经历阻塞,就绪运行等状态的变化。

四. 线程的状态与切换

  • 执行态:线程获得CPU而正在运行。
  • 就绪态:只缺少CPU即可立即执行。
  • 阻塞态:因某件事受阻(不单单是缺少CPU)处于暂停状态。

线程的状态转换与进程是一样的。

联想截图_20240719002814.png

五. 线程的组织与控制

线程控制块(TCB)

结构:包括 ①线程标识符;②一组寄存器【PC,状态寄存器,通用寄存器】;③线程运行状态标识;④优先级;⑤线程专有存储区:线程切换时用于保护现场;
⑥堆栈指针:过程调用时保存局部变量和返回地址等。

同一进程的线程共享进程地址空间每个单元,因此一个线程可以读,写,清除另一个线程的堆栈。

线程创建

线程具有生命周期,由创建而产生,由调度而执行,终止而消亡。OS中存在用于创建线程和终止线程的函数(或系统调用)。
用户程序启动时候,通常只有一个名为 初始化线程的线程正在执行,用于创建新的线程。需要利用线程创建函数并提供相应的参数,如:指向线程主程序的入口指针,堆栈的的大小,线程优先级等。执行完毕后,将返回一个线程标识符。

线程终止

当一个线程完成任务(或被强行终止)后,由终止线程调用相应函数执行终止操作。但是有些线程(主要是系统线程)一旦建立就一直运行,不会被终止

通常,线程被终止后并不立即释放占有的资源,只有当进程中所有线程执行分离函数后线程才会与资源分离

六. 线程的实现方式

用户级线程(User-Level-Thread,ULT)

早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的’线程“是由线程库实现的。

  • 定义:”从用户视角能看到的线程“
  • 特点:
    • 线程管理(创建,撤销和切换等)所有工作由应用程序在用户空间(用户态)下完成,无需OS的干预。内核意识不到线程的存在。
    • 应用程序可以通过线程库设计成多线程程序
  • 优点:与操作系统平台无关;用户级线程切换在用户空间即可完成,不需要切换到内核态,线程管理系统开销小,效率高
  • 缺点:一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不能在多核处理机上并行运行。【内核分配给一个进程的只有一个CPU,因此进程中只有一个线程可以执行】

内核级线程(Kernel-Level-Thread,KLT)

联想截图_20240719003935.png

组合方式

内核支持多个内核级线程的建立,调度和管理;同时允许用户建立,调度和管理用户级线程,这是用户级线程通过时分多路复用内核级线程实现的。

  • 特点:同一进程的多个线程可以同时在多个CPU上并行执行。

拓展:线程库(thread library)
是为程序员提供创建和管理线程的API,实现线程库的主要方法:

联想截图_20240719005000.png
用户级线程,内核级线程和组合方式线程链接简化图:
联想截图_20240719005230.png

七. 多线程模型

在同时支持用户级线程和内核级线程的系统中,根据用户级线程和内核级线程连接方式的不同,分为以下三种模型。
联想截图_20240719005306.png

多对一模型

联想截图_20240719005525.png

一对一模型

联想截图_20240719005440.png

多对多模型

联想截图_20240719005604.png

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

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

相关文章

刷题了:977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

学习记录,主要参考:代码随想录 977.有序数组的平方 题目链接:https://leetcode.cn/problems/remove-element/ 文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html 视频讲解:http…

【go】Excelize处理excel表 带合并单元格、自动换行与固定列宽的文件导出

文章目录 1 简介2 相关需求与实现2.1 导出带单元格合并的excel文件2.2 导出增加自动换行和固定列宽的excel文件 1 简介 之前整理过使用Excelize导出原始excel文件与增加数据校验的excel导出。【go】Excelize处理excel表 带数据校验的文件导出 本文整理使用Excelize导出带单元…

签名优化:请求数据类型不是`application/json`,将只对随机数进行签名计算,例如文件上传接口。

文章目录 I 签名进行请求数据类型类型判断1.1 常见的ContentType1.2 签名切面处理1.3 文件上传案例1.4 处理接口信息背景: 文件上传接口的请求数据类型通常为multipart/form-data,方便携带文本域和使用接口文档进行调试。 如果携带JSON数据,不方便调试接口。 前端数据也要特…

如何学习Hadoop:糙快猛的大数据之路(利用GPT 学习)

目录 引言Hadoop是什么?学习Hadoop的"糙快猛"之道1. 不要追求完美,先动手再说2. 从简单的MapReduce开始3. 利用大模型加速学习4. 循序渐进,建立知识体系 构建您的Hadoop技能树1. 夯实基础:Linux和Java2. 深入理解HDFS3.…

Chromium CI/CD 之Jenkins实用指南2024 - 常见的构建错误(六)

1. 引言 在前一篇《Chromium CI/CD 之 Jenkins - 发送任务到Ubuntu(五)》中,我们详细讲解了如何将Jenkins任务发送到Ubuntu节点执行,并成功验证了文件的传输和回传。这些操作帮助您充分利用远程节点资源,提升了构建和…

收银系统源码-商城下单,门店接单

随着新零售时代的不断进步,线下线上一体化的收银系统,被很多门店越来越重视。用户在线上商城下单后,门店如何接单呢,如何处理订单呢? 1.收银系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后合管理网…

【BUG】已解决:note: This is an issue with the package mentioned above,not pip.

已解决:note: This is an issue with the package mentioned above,not pip. 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷…

操作系统发展简史(Unix/Linux 篇 + DOS/Windows 篇)+ Mac 与 Microsoft 之风云争霸

操作系统发展简史(Unix/Linux 篇) 说到操作系统,大家都不会陌生。我们天天都在接触操作系统 —— 用台式机或笔记本电脑,使用的是 windows 和 macOS 系统;用手机、平板电脑,则是 android(安卓&…

1. 个人谈心 ——【如何学习编程及合理安排休息时间】

📖 声明 ! ! ! 此文章仅仅属于个人思想,如有不满或者意见不相同,可以在评论区讨论留言,非常感谢支持!!! 💕个人主页:三亿老奶奶心中的梦 📘收录专栏&#xff…

AI(Adobe lliustrator)教程+软件包

简介: 软件主要应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等,也可以为线稿提供较高的精度和控制,适合生产任何小型设计到大型的复杂项目。 通常用于创建LOGO(商标或徽标),图标,插图…

Spring-Boot基础--yaml

目录 Spring-Boot配置文件 注意: YAML简介 YAML基础语法 YAML:数据格式 YAML文件读取配置内容 逐个注入 批量注入 ConfigurationProperties 和value的区别 Spring-Boot配置文件 Spring-Boot中不用编写.xml文件,但是spring-Boot中还是存在.prope…

深入理解CSS基础【代码审计实战指南】

文章目录 为什么需要cssCSS语法CSS的组成css注释: 快速入门示例:常用样式字体颜色和边框颜色介绍颜色示例:边框边框的宽度与高度 字体样式背景样式文本居中 字体颜色和边框颜色介绍颜色示例:边框边框的宽度与高度 字体样式背景样式…

了解PHY,MAC芯片

物理层芯片叫做PHY、数据链路层芯片叫做MAC。 1、MCU内置MAC芯片外部PHY芯片 1.1、PHY PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC&am…

拖拽上传(预览图片)

需求 点击上传图片&#xff0c;或直接拖拽图片到红色方框里面也可上传图片&#xff0c;上传后预览图片 效果 实现 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content&…

GIT--git clone fatal [文件过大或网络不稳定] [大型仓库]

GIT--git clone fatal 1 介绍1.1 原因分类1.2 文件过大或网络不稳定 2 分析3 操作3.1 指定克隆深度【浅克隆】3.2 分批次下载3.3 增大Git的HTTP POST缓冲区大小3.4 配置git的最低速度和最低速度时间(单位&#xff1a;秒)3.5 压缩3.6 过滤下载 git filter branch3.7 仅克隆一个分…

Go语言并发编程-Context上下文

Context上下文 Context概述 Go 1.7 标准库引入 context&#xff0c;译作“上下文”&#xff0c;准确说它是 goroutine 的上下文&#xff0c;包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息&#xff0c;包括&#xff1a;取…

AI发展下的伦理挑战,应当如何应对?

人工智能&#xff08;AI&#xff09;的快速发展带来了许多伦理挑战&#xff0c;如何应对这些挑战是一个复杂而多方面的问题。以下是一些应对策略和建议&#xff1a; 坚持伦理先行原则&#xff1a; 制定科技伦理规范和标准&#xff0c;将伦理规范嵌入人工智能开发、运行等各个阶…

从PyTorch官方的一篇教程说开去(2 - 源码)

先上图&#xff0c;上篇文章的运行结果&#xff0c;可以看到&#xff0c;算法在迭代了200来次左右达到人生巅峰&#xff0c;倒立摆金枪不倒&#xff0c;可以扛住连续200次操作。不幸的是&#xff0c;然后就出现了大幅度的回撤&#xff0c;每况愈下&#xff0c;在600次时候居然和…

web安全之SQL手工注入漏洞测试

一、目的 1.掌握SQL注入原理&#xff1b; Sql注入详解(原理篇)_sql注入攻击的原理-CSDN博客 2.了解手工注入的方法&#xff1b; 3.了解MySQL的数据结构&#xff1b; 4.了解字符串的MD5加解密 二、过程 1.进去后出现以下界面 找注入点 发现有注入点&#xff0c;即id被代入执…

基于X86+FPGA+AI的远程医疗系统,支持12/13代 Intel Core处理器

工控主板&#xff1a;支持12/13代 Intel Core处理器&#xff0c;适用于远程医疗系统 顺应数字化、网络化、智能化发展趋势&#xff0c;国内医疗产业改革正在积极推进&#xff0c;远程医疗、智慧医疗等新模式新业态创新发展和应用&#xff0c;市场空间不断扩大&#xff0c;而基…