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

操作系统-进程与线程

操作系统

操作系统用来保护系统资源和提高稳定性的重要机制

文章目录

        • 用户态和内核态
          • 为什么要区分状态?
        • 进程管理
          • 进程,线程
          • 进程/线程切换
          • 进程的5种状态
          • 进程通信
          • 线程通讯
          • 进程调度算法

用户态和内核态
  • 用户态

    应用程序运行时所在的模式,权限受限,无法直接访问硬件或执行特权指令。

    1. 无法直接访问硬件(如磁盘、网卡)
    2. 只能访问分配给它的内存区域(用户空间)
    3. 不能执行特权指令(如开关中断、修改内存映射)
    4. 防止应用程序错误或恶意代码破坏系统或其他进程
  • 内核态

    操作系统内核运行时所在的模式,拥有最高权限,可直接控制系统资源。

    1. 可访问所有内存(包括内核空间和用户空间)

    2. 能直接操作硬件设备

    3. 可执行所有CPU指令(包括特权指令)。

    4. 管理进程、内存、文件系统、设备驱动等核心功能

为什么要区分状态?
  1. 安全性:如果没有权限区分,应用程序可能随意访问硬件或修改关键数据,导致系统崩溃或被恶意利用
  2. 稳定性:通过限制用户程序的权限,防止一个程序的错误影响整个系统
  3. **隔离性:**操作系统内核与用户程序之间有了明确的边界,有利于系统的模块化和维护。
进程管理
进程,线程

在这里插入图片描述

  • 进程(Process)

    进程是操作系统资源分配(虚拟内存、文件句柄、信号量等资源)的基本单位,拥有独立的地址空间、资源(如内存、文件句柄)和系统状态。

    • 独立性:进程间资源隔离,每个进程都有自己独立的内存空间,一个进程崩溃,其内存空间会被操作系统回收,不会影响其他进程的内存空间。
    • 并发性:多个进程可通过分时或并行在CPU上交替执行。
    • 生命周期:创建(分配资源、建立 PCB)、就绪、运行、阻塞、终止(回收资源、撤销 PCB)。
  • 线程(Thread)

    线程是操作系统任务调度和执行的基本单位,是进程内的执行单元,共享同一进程的内存和资源(如文件描述符),但拥有独立的栈和寄存器。

    • 轻量级:创建和切换开销远小于进程。
    • 共享性:线程直接访问进程的全局变量和堆内存。
    • 并发粒度:多线程可并行执行(需多核CPU支持)。

    二者区别

    维度进程线程
    资源占用独立内存空间,开销大共享进程资源,开销小
    崩溃影响不影响其他进程导致整个进程终止
    切换开销高(涉及内存映射、PCB保存)低(仅切换栈和寄存器)
    并发性多进程并行(依赖多核)多线程并行(更细粒度)

    举个形象一点的例子:

    进程— 一个独立的“公司”

    • 比喻:想象进程是一家独立的公司。
      • 独立办公室:公司有自己独立的办公空间(内存空间)。
      • 独立资源:公司有自己的打印机、会议室(CPU、文件、网络等资源)。
      • 员工协作:公司内部可能有多个员工(线程)一起工作。
    • 关键特点:
      进程之间完全隔离——一家公司倒闭了(崩溃),不会直接影响其他公司。

    线程— 公司里的“员工”

    • 比喻:线程就像公司里的员工。
      • 共享办公室:所有员工共享公司的办公空间(共享进程的内存和资源)。
      • 分工协作:员工可以同时做不同任务(并行处理任务)。
      • 沟通成本低:员工之间可以直接说话(直接共享数据),无需走复杂流程。
    • 关键特点:
      线程之间高度共享——一个员工搞砸了(崩溃),可能让整个公司瘫痪!

协程:

是一种用户态轻量级线程,由程序自身控制调度(而非操作系统内核)。

协程拥有自己的寄存器上下文和栈,但与其他协程共享堆内存。

多线程

多线程:

  1. 运行效率高
  2. 充分利用多核处理器资源
  3. 同时处理多个任务,执行速度快
  4. 数据竞争,需要加锁保证线程安全,增加锁开销和产生死锁风险等
  5. 线程的创建和切换,消耗更多系统资源(每个线程都需要占用一定内存和处理时间)
进程/线程切换

操作系统将 CPU 从当前执行的任务(进程或线程)切换到另一个任务的过程。

切换时需要保存当前任务的状态,并恢复下一个任务的状态。

  • CPU上下文切换(含进程/线程/中断上下文切换):

    CPU 寄存器和程序计数器是 CPU 在运行任何任务前,所必须依赖的环境,这些环境就叫做 CPU 上下文

    CPU 寄存器:CPU 内部一个容量小,但是速度极快的内存(缓存)。类似衣服口袋,而内存像书包,硬盘则是家里的柜子。

    **程序计数器:**存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。

    CPU上下文切换:保存前一个任务的CPU上下文,加载新任务的上下文,然后跳转程序计数器所指的新位置,运行新任务。

进程切换

  1. 触发切换:

    • 时间片用完(分时调度)。
    • 进程主动阻塞(如等待 I/O)。
    • 高优先级进程抢占。
  2. 保存当前进程上下文:

    • 进程控制块(PCB):保存寄存器状态、程序计数器、内存页表、文件描述符等。
    • 内存隔离:切换时需更新内存管理单元的页表基址寄存器,保证进程地址空间独立。
  3. 切换内核栈:

    • 每个进程有独立的内核栈,用于执行系统调用时的内核代码。
  4. 调度新进程:

    • 从就绪队列中选择下一个进程,加载其 PCB 中的上下文。
  5. 恢复新进程上下文:

    • 恢复寄存器、内存映射、权限状态等。
    • 更新 CPU 的当前进程指针。

线程切换

线程切换在同一进程内进行,共享内存和资源,因此开销显著低于进程切换。

  1. 触发切换:
    • 时间片用完或线程主动让出。
  2. 保存当前线程上下文:
    • 线程控制块(TCB):保存寄存器状态、线程栈指针等。
    • 无需切换内存映射:线程共享进程的地址空间, 页表无需更新。
  3. 调度新线程:
    • 从进程的线程就绪队列中选择下一个线程。
  4. 恢复新线程上下文:
    • 恢复寄存器、栈指针等。
    • 无需切换内存或文件资源。
进程的5种状态

在这里插入图片描述

进程通信

操作系统提供的机制,允许不同进程之间交换数据或协调工作(终止/挂起)或资源共享(临界资源)。

由于进程间内存相互隔离,必须通过内核或共享资源实现通信。

常见的进程通信方式:

1.管道

创建一块内核缓冲区,连接两个进程,实现单向数据(无格式的流并且大小受限的数据)传输(读端和写端分离)。

  • 匿名管道

    • 匿名管道是特殊文件只存在于内存,没有存在于文件系统中

    • 仅用于 父子进程或兄弟进程(有血缘关系的进程)。

    • 通信方式单向,数据只能在一个方向上流动,如果要双向通信,要创建两个管道。

    • 特点:临时存在,进程结束后销毁。

  • 命名管道

    • 基于文件系统,可用于 无血缘关系的进程。
    • 特点:长期存在(需手动删除)。

2.消息队列

克服了管道通信的数据是无格式的字节流的问题。

内核中维护一个消息链表,进程可通过消息类型发送 / 接收格式化数据块。

消息队列的消息体是用户自定义的数据类型,发送和接收的数据类型保持一致

  • 每次数据的写入和读取都需要经过用户态与内核态之间的拷贝过程。

    用户进程运行在用户态,无法直接访问内核空间的数据。当进程想要发送消息时,它需要将数据从用户空间(用户态内存)复制到内核空间(内核态内存),这个过程需要切换到内核态,由操作系统内核来完成。同样,接收消息时,数据需要从内核空间复制回用户空间,这同样需要内核态的权限。

3.共享内存

解决了消息队列的每次数据的写入和读取都需要经过用户态与内核态之间的拷贝过程带来的开销问题。

允许多个进程直接访问同一块物理内存区域,是速度最快的IPC方式。

多个进程直接操作同一内存区域,竞争同个共享资源会造成数据错乱。一般使用信号量,互斥锁,文件锁等同步机制防止竞态条件

信号量:资源个数,通过P(申请),V(释放)操作确保任何时刻只能有一个进程访问共享资源,进行互斥访问。

4.信号

异步事件通知机制,允许内核或进程通知目标进程某个事件的发生。

信号事件的来源主要有硬件来源(如键盘 Cltr+C )和软件来源(如 kill 命令)。

进程对信号的处理可分为三种:

  1. 默认行为:由操作系统预定义(如终止、忽略、暂停进程等)。
  2. 忽略信号:通过 signal(SIGXXX, SIG_IGN) 显式忽略。
  3. 自定义处理函数:注册用户定义的信号处理函数。

但,有两个信号是应用进程无法捕捉和忽略的,即 SIGKILL 和 SIGSTOP,这是为了方便我们能在任何时候结束或停止某个进程。

与前面通信方式不同,前面都是工作于同一主机,那么如果是不同主机,就需要用到:Socket。

Socket:

也为套接字,是一种网络通信的抽象接口,用于实现不同设备(或同一设备)上的进程间通信(IPC)。

允许不同主机(或同一主机)上的进程通过网络协议(如 TCP/UDP/IP)交换数据。

线程通讯

多个线程访问共享资源时,必须通过同步机制避免数据竞争

1.互斥锁

在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁,确保同一时间只有一个线程访问共享资源。

2.条件变量

一般结合互斥锁使用,让线程在特定条件满足前挂起等待,条件满足后被唤醒,典型应用:生产者-消费者模型。

4.自旋锁

自旋锁是一种基于忙等待(Busy-Waiting)的同步机制。

通过 CPU 提供的 CAS 函数(Compare And Swap),当线程尝试获取锁失败时,它会循环检查锁的状态(“自旋”),直到它拿到锁。

等待时间较短的情况下效率较高,因为避免了线程上下文切换的开销。但长时间等待会导致CPU资源的浪费。

适用于多核系统,且临界区代码执行时间非常短的场景。

5.读写锁

读写锁区分读操作写操作,允许多个读线程并发访问共享资源,但写线程必须独占访问。

(读者写者问题:可以多个读者同时都读,但是如果有写者在写,则其他写者不能写,读者也不能同时读)

  • 读锁:多个线程可同时获取读锁,共享资源。
  • 写锁:独占锁,获取时需确保无读锁或写锁存在。

适用读多写少的场景

4.信号量(同上)

进程调度算法

1.先来先服务FCFS

先来后到,每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。

在这里插入图片描述

利于长作业,不利于短作业(等待时间长,但是运行时间短)。想象排队付钱。

2.短作业优先SJF

每次从当前已到达且未执行的进程中选择运行时间最短的那个来执行

在这里插入图片描述

利于短作业,不利于长作业(长期不会被调度)

3.高相应比优先HRRN

综合FCFS和SJF,响应比Rp=1+等待时间/服务时间。Rp越高越先被调度。

从公式来看,当等待时间相同时,服务时间越短的,Rp越大(SJF)

当服务时间相同时,等待时间越长,Rp越大(FCFS)。

4.时间片轮转RR

每个进程被分配一个时间段(时间片),该进程只能在该段时间内运行。

时间片用完,CPU直接分配给其他进程。

时间片没用完但进程结束了,CPU也立即切换。

5.最高优先级

优先级分为

静态优先级:创建进程时,就确定了的,不再变化
动态优先级:根据进程动态变化调整优先级。进程运行时间增加(降低其优先级);就绪队列进程等待时间增加(增加队列优先级)。

处理优先级分为:

非抢占式:如果就绪队列有优先级更高的,也得先等将当前进程运行完

抢占式:如果就绪队列有优先级更高的,则当前进程挂起,运行更高进程。

6.多级反馈队列

综合先来先服务,时间片轮转和最高优先级。

多级:设置多个队列,每个队列优先级从高到低,同时优先级越高时间片越短

反馈:如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列。

防止饥饿:周期性的优先级调整,将低优先级队列中等待时间过长的进程重新提到高优先级队列,避免它们被饿死。

来看具体调度过程:

当一个新进程到达时,它会被放入最高优先级的队列。如果它在该队列的时间片内没有完成,就会被移到下一个较低优先级的队列。

当较高优先级的队列为空,调度较低优先级队列,如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,将其移入原队列末尾,转而去运行优先级高的队列。

在这里插入图片描述
感谢大家的观看,刚刚考完操作系统,结合小林Coding,总结了一些知识点>W<

相关文章:

操作系统-进程与线程

操作系统 操作系统用来保护系统资源和提高稳定性的重要机制 文章目录 用户态和内核态为什么要区分状态&#xff1f; 进程管理进程&#xff0c;线程进程/线程切换进程的5种状态进程通信线程通讯进程调度算法 用户态和内核态 用户态 应用程序运行时所在的模式&#xff0c;权限受限…...

人体肢体渲染-一步几个脚印从头设计数字生命——仙盟创梦IDE

人体肢体动作数据集-太极拳 渲染代码 # 初始化Pygame pygame.init()# 设置窗口尺寸 WINDOW_WIDTH 800 WINDOW_HEIGHT 600 window pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("动作回放")# 设置帧率 FPS 30 clock pyg…...

如何安全配置好CDN用于防止DDoS与Web攻击 ?

保护网站免受DDoS和Web攻击是至关重要的&#xff0c;CDN&#xff08;内容分发网络&#xff09;可以作为一种有效的防御工具。以下是一些安全配置CDN以防止DDoS和Web攻击的最佳实践&#xff1a; 1. 选择可靠的CDN提供商 安全功能&#xff1a; 选择拥有强大安全功能的CDN提供商…...

01-数据结构概述和时间空间复杂度

数据结构概述和时间空间复杂度 1. 什么是数据结构 数据结构&#xff08;Data Structure&#xff09;是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 2. 什么是算法 算法&#xff08;Algorithm&#xff09;就是定义良好的计算…...

【ArcGIS技巧】根据地块、界址点图层生成界址线

"农经权二轮延包我已经写的差不多了&#xff0c;需要的一些生成四至、分割地块的功能也分享了替代的插件。前面刚分享完界址点的生成&#xff0c;今天分享界址线的生成&#xff0c;有需要的自取&#xff0c;至此&#xff0c;基本可以用这些功能完成出成果工作。" 1、…...

PC:使用WinSCP密钥文件连接sftp服务器

1. 打开winscp工具&#xff0c;点击“标签页”->“新标签页” 2. 点击“高级"->“高级” 3. 点击"验证"->“选择密钥文件” 选择ppk文件&#xff0c;如果没有ppk文件选择pem文件&#xff0c;会自动生成ppk文件 点击确定 4. 输入要连接到的sftp服务器的…...

RedHat7 如何更换yum镜像源

RedHat7如何更换yum镜像源&#xff1f; # 删除系统自带 yum rpm -qa|grep -e yum -e python-urlgrabber |xargs rpm -e --nodeps# 下载yum与wget的rpm软件包 curl -O http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm curl -O ht…...

k8s 1.10.26 一次containerd失败引发kubectl不可用问题

k8s 1.10.26 一次containerd失败引发kubectl不可用问题 开机k8s 1.10.26时&#xff0c;报以下错误 [rootmaster ~]# kubectl get no E0515 08:03:00.914894 7993 memcache.go:265] couldnt get current server API group list: Get "https://192.168.80.50:6443/api?…...

Qt信号槽机制与UI设计完全指南:从基础原理到实战应用

目录 前言一、信号槽1.1 传参1.2 Qt信号与槽的对应关系1.2.1一对多关系1.2.2 多对一关系 二、Designer三、Layout 布局3.1 基础用法3.2 打破布局3.3 贴合窗口3.4 伸展器&#xff08;Spacer&#xff09;3.5 嵌套布局 四、ui指针五、QWidget六、QLabel 标签使用指南总结 前言 本…...

微信小程序van-dialog确认验证失败时阻止对话框的关闭

使用官方(Vant Weapp - 轻量、可靠的小程序 UI 组件库)的before-close&#xff1a; wxml&#xff1a; <van-dialog use-slot title"名称" show"{{ show }}" show-cancel-button bind:cancel"onClose" bind:confirm"getBackInfo"…...

嵌入式学习--江科大51单片机day7

我们在听课的过程中&#xff0c;可能对老师讲的有疑问&#xff0c;或者有些自己的理解&#xff0c;我们可以去问豆包&#xff0c;包括在写博客的时候我也是&#xff0c;不断去问豆包保证思考的正确性。&#xff08;有人感觉豆包很low啊&#xff0c;其实这些基础性的东西豆包一般…...

spark和hadoop之间的区别和联系

Spark和Hadoop的对比 1. 架构层面 Hadoop&#xff1a; HDFS&#xff08;分布式文件系统&#xff09;&#xff1a;Hadoop的核心组件之一&#xff0c;用于存储大规模数据。它将数据分散存储在多个节点上&#xff0c;通过冗余存储&#xff08;默认三副本&#xff09;来保证数据…...

antd mobile 点击 TabBar 切换页面

switchRoute 函数&#xff0c;navigate 点击的 path import { Button, TabBar } from "antd-mobile"; import { useEffect } from "react"; import { Outlet, useNavigate } from "react-router-dom"; import { useDispatch } from "react…...

20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图

20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图 2025/5/15 20:19 缘起&#xff1a;以前做的网线找不到了&#xff0c;那就再来一条吧。 引脚定义要从头来过&#xff1f;还好找到了一条。 开干&#xff01; 万用表一对/点&#xff0c;几…...

大语言模型 07 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机训练 预训练 监督微调

写在前面 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是目前最广泛应用的大语言模型架构之一&#xff0c;其强大的自然语言理解与生成能力背后&#xff0c;是一个庞大而精细的训练流程。本文将从宏观到微观&#xff0c;系统讲解GPT的训练过程&#xff0c;…...

【学习心得】WSL2安装Ubuntu22.04

为了使用Docker desktop&#xff0c;所以我的win10需要安装一下wsl并且下载一个Ubuntu。默认Windows10/11是自带wsl的&#xff0c;你在进行下面操作的时候可以升级一下wsl --update 1、管理员身份打开cmd&#xff0c;输入命令查询所有可以下载的Linux版本 # 查看有哪些 Linux 发…...

人工智能、深度学习、机器学习的联系与区别

定义 人工智能&#xff08;AI - Artificial Intelligence&#xff09; &#xff1a;是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。它旨在让计算机能够像人类一样思考、学习和决策&#xff0c;涉及到诸如计算机视觉、自然语言处理…...

基于互联网和LabVIEW的多通道数据采集系统仿真设计

标题:基于互联网和LabVIEW的多通道数据采集系统仿真设计 内容:1.摘要 在当今科技飞速发展的背景下&#xff0c;多通道数据采集在众多领域有着广泛需求。本研究的目的是设计一个基于互联网和LabVIEW的多通道数据采集系统仿真方案。采用互联网技术实现数据的远程传输与共享&…...

【Android】Android 实现一个依赖注入的注解

Android 实现一个依赖注入的注解 &#x1f3af; 目标功能 自定义注解 Inject创建一个 Injector 类&#xff0c;用来扫描并注入对象支持 Activity 或其他类中的字段注入 &#x1f9e9; 步骤一&#xff1a;定义注解 import java.lang.annotation.ElementType; import java.lan…...

【Ansible基础】Ansible 核心组件深度解析:控制节点、受管节点、Inventory与Playbook

目录​​​​​​​ 1 Ansible架构概述 2 控制节点&#xff08;Control Node&#xff09;详解 2.1 控制节点定义与功能 2.2 控制节点配置文件 3 受管节点&#xff08;Managed Node&#xff09;详解 3.1 受管节点特点 3.2 受管节点准备工作 3.3 连接方式对比 4 Invento…...

数据库--处理模型(Processing Model)(二)

执行查询的方法有很多,接下来将介绍以更高效和更有效率的方式执行分析工作负载(在OLAP系统中)的不同技术,包括以下内容: 执行并行性(Execution Parallelism)执行引擎(Execution Engines)执行操作符输出(Execution Operator Output)中间数据表示(Intermediate Data …...

机器学习 day03

文章目录 前言一、特征降维1.特征选择2.主成分分析&#xff08;PCA&#xff09; 二、KNN算法三、模型的保存与加载 前言 通过今天的学习&#xff0c;我掌握了机器学习中的特征降维的概念以及用法&#xff0c;KNN算法的基本原理及用法&#xff0c;模型的保存和加载 一、特征降维…...

鸿蒙OSUniApp 制作简洁高效的标签云组件#三方框架 #Uniapp

UniApp 制作简洁高效的标签云组件 在移动端应用中&#xff0c;标签云&#xff08;Tag Cloud&#xff09;是一种常见的UI组件&#xff0c;它以视觉化的方式展示关键词或分类&#xff0c;帮助用户快速浏览和选择感兴趣的内容。本文将详细讲解如何在UniApp框架中实现一个简洁高效的…...

【测试】用例篇

目录 1、如何编写测试用例&#xff1a; 1.1、设计测试用例时&#xff1a;正向思维逆向思维发散思维 2.2、万能公式 2、设计测试用例的方法 2.1、基于需求设计方法 1&#xff09;等价类: 2&#xff09;边界类 3&#xff09;场景法 4&#xff09;正交表法 5&#xff09;…...

力扣-46.全排列

题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList<>();void backtracking(i…...

【氮化镓】HfO2钝化优化GaN 器件性能

2025年,南洋理工大学的Pradip Dalapati等人在《Applied Surface Science》期刊发表了题为《Role of ex-situ HfO2 passivation to improve device performance and suppress X-ray-induced degradation characteristics of in-situ Si3N4/AlN/GaN MIS-HEMTs》的文章。该研究基…...

STL?list!!!

一、引言 之前我们一起完成了STL库中的vector&#xff0c;本期我们将一起完成list这一容器&#xff0c;在本期学习中&#xff0c;我们会更加加深对于模板的认识&#xff0c;让我们更加能感受到模板的魅力&#xff01; 二、list的介绍与相关接口 list是STL库中提供的一个链表容…...

2025.05.14华为机考笔试题-第一题-100分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 优先级任务调度系统 问题描述 LYA公司的开发团队正在设计一个智能任务调度系统。该系统需要根据任务优先级动态调整执行顺序,以提高团队工作效率。系统需要支持以下三种操作:…...

紫外相机工作原理及可应用范围

紫外相机是一种利用紫外线&#xff08;UV&#xff09;波段进行成像的设备&#xff0c;紫外线可用于机器视觉应用中&#xff0c;以检测使用可见光无法检测到的特征&#xff0c;工业上使用最常见的紫外波长是365nm和395nm。紫外相机通常用于高分辨率视频显微镜、电晕检测、半导体…...

海外短剧H5/App开源系统搭建指南:多语言+国际支付+极速部署

在全球短视频与短剧内容消费热潮下&#xff0c;搭建一个支持多语言、集成国际支付且能快速部署的海外短剧平台&#xff0c;已成为内容创作者和运营者的核心需求。本文将结合行业前沿技术与开源方案&#xff0c;提供一套完整的系统搭建指南&#xff0c;助您高效实现全球化布局 …...

AWS EC2 微服务 金丝雀发布(Canary Release)方案

为什么需要实现金丝雀发布? 在当前项目的工程实践中, 已经有了充分的单元测试, 预发布环境测试, 但是还是会在线上环境出现非预期的情况, 导致线上事故, 因此, 为了提升服务质量, 需要线上能够有一个预验证的机制. 如何实现金丝雀发布? 使用AWS code deploy方案 AWS code…...

2025年5月华为H12-821新增题库带解析

IS-IS核心知识 四台路由器运行IS-IS且已经建立邻接关系&#xff0c;区域号和路由器的等级如图中标记&#xff0c;下列说法中正确的有? R2和R3都会产生ATT置位的Level-1的LSPR1没有R4产生的LSP&#xff0c;因此R1只通过缺省路由和R4通信R2和R3都会产生ATT置位的Leve1-2的LSPR2和…...

从单体架构到微服务:架构演进之路

引言&#xff1a;当“大货车”遇上“集装箱运输” 在软件开发领域&#xff0c;单体架构曾像一辆载满货物的大货车&#xff0c;将所有功能打包在一个应用中。但随着业务复杂度飙升&#xff0c;这辆“大货车”逐渐陷入泥潭&#xff1a;启动慢如蜗牛、故障波及全局、升级如履薄冰……...

从 Excel 到 Data.olllo:数据分析师的提效之路

背景&#xff1a;Excel 的能力边界 对许多数据分析师而言&#xff0c;Excel 是入门数据处理的第一工具。然而&#xff0c;随着业务数据量的增长&#xff0c;Excel 的一些固有限制逐渐显现&#xff1a; 操作容易出错&#xff0c;难以审计&#xff1b; 打开或操作百万行数据时&…...

Uniapp开发鸿蒙购物项目教程之样式选择器

大家好&#xff0c;今天依然为大家带来鸿蒙跨平台开发教程的分享&#xff0c;我们本系列的教程最终要做一个购物应用&#xff0c;通过这个项目为大家分享uniapp开发鸿蒙应用从配置开发环境到应用打包上架的完成过程。 昨天的文章实现了应用首页的轮播图&#xff0c;其中涉及到…...

AI全域智能监控系统重构商业清洁管理范式——从被动响应到主动预防的监控效能革命

一、四维立体监控网络技术架构 1. 人员行为监控 - 融合人脸识别、骨骼追踪与RFID工牌技术&#xff0c;身份识别准确率99.97% - 支持15米超距夜间红外监控&#xff08;精度0.01lux&#xff09; 2. 作业过程监控 - UWB厘米级定位技术&#xff08;误差&#xff1c;0.3米&…...

协作赋能-1-制造业生产流程重构

制造业生产流程重构——从“信息孤岛”到“全链协同” 在制造业的数字化转型浪潮中&#xff0c;一个看似矛盾的现象正在蔓延&#xff1a;企业部署了ERP、MES、PLM等管理系统&#xff0c;却仍未摆脱“纸质工单满天飞、跨部门扯皮不断”的困境。以汽车制造业为例&#xff0c;其…...

游戏行业DDoS攻击类型及防御分析

游戏行业作为DDoS攻击的高发领域&#xff0c;攻击类型复杂多样&#xff0c;结合多个来源的信息&#xff0c;以下是其主要攻击类型及特征分析&#xff1a; 1. 传统流量型DDoS攻击 UDP洪水攻击&#xff1a;通过大量UDP报文淹没服务器端口&#xff0c;消耗带宽资源&#xff0c;导…...

嵌入式学习的第二十一天-数据结构-双向链表

一、双向链表 1.定义 双向链表是在单链表的每个结点中&#xff0c;再设置一个指向其钱去节点的指针域。 typedef struct DulNode {ElemType date;struct DulNode *pri;//直接前驱指针sturct DulNode *next&#xff1b;//直接后继指针 }DulNode,*DuLinkList;2.双向链表的创建 …...

Python爬虫第21节- 基础图形验证码识别实战

目录 前言 一、学习目标 二、环境准备 2.1 安装依赖 2.2 验证安装 三、获取验证码图片 3.1 常见获取方式 3.2 图片格式要求 四、基础识别流程 4.1 基础流程 4.2 常见问题及解决方案 五、 图像预处理提升识别率 5.1 灰度化 5.2 二值化 5.3 自定义阈值二值化 5.4…...

【React全栈进阶】从组件设计到性能优化实战指南

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…...

基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案‌

&#xff08;国产化替代J1900的应急救援智能化解决方案&#xff09; 一、硬件架构设计‌ ‌极端环境防护系统‌ ‌防爆耐高温设计‌&#xff1a; 采用陶瓷纤维复合装甲&#xff08;耐温1200℃持续1小时&#xff09;&#xff0c;通过GB 26784-2023消防设备防爆认证IP68防护等级…...

插件双更新:LeetCode 刷题支持正式上线,JetBrains IDE 插件持续升级!

为了让更多开发者在真实开发与算法练习中体验 MoonBit 的高效表达与编译性能&#xff0c;MoonBit 语言现已实现对 JetBrains 开发环境与 LeetCode 答题平台的全面支持&#xff01; 无论你是习惯用 IDE 编写项目的开发者&#xff0c;还是希望通过 LeetCode 刷题提升算法能力的程…...

编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC perl环境

Unix / Linux / macOS $ ./Configure $ make $ make test1、make Can‘t locate IPC/Cmd.pm in INC [ Downloads ] - /source/index.html https://www.openssl.org/source/ yum -y install perl-IPC-Cmd 2.make test Can’t locate Test/More.pm in INC perl环境 yum -…...

新型智慧园区技术架构深度解析:数字孪生与零碳科技的融合实践

&#x1f3ed;在杭州亚运村零碳园区&#xff0c;光伏板与氢燃料大巴构成的能源网络&#xff0c;正通过数字孪生技术实现智能调度。这不仅是格力电器与龙源电力在新能源领域的创新实践&#xff0c;更是智慧园区4.0时代的标杆案例。当AI算法开始接管能源调度&#xff0c;当BIM建模…...

2025全网首发:ComfyUI整合GPT-Image-1完全指南 - 8步实现AI图像创作革命

ComfyUI整合GPT-Image-1完全指南&#xff1a;8步实现AI图像创作革命【2025最新】 OpenAI最新发布的GPT-Image-1模型&#xff08;也就是ChatGPT-4o背后的图像生成技术&#xff09;已经通过API开放使用&#xff0c;而令人惊喜的是&#xff0c;ComfyUI已经第一时间提供了完整支持&…...

AWS Elastic Beanstalk控制台部署Spring极简工程

问题 上次通过EB CLI工具没有成功在AWS中国云部署成功&#xff0c;这次通过EB web控制台来部署。 步骤 接着上次部署失败的Spring工程&#xff1a;AWS Elastic Beanstalk部署极简Spring工程&#xff08;EB CLI失败版&#xff09;&#xff0c;准备好jar文件。 创建ec2私钥文…...

力扣-236.二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…...

LeetCode 3337.字符串转换后的长度 II:矩阵快速幂(也没有想象中的那么高级啦)

【LetMeFly】3337.字符串转换后的长度 II&#xff1a;矩阵快速幂(也没有想象中的那么高级啦) 力扣题目链接&#xff1a;https://leetcode.cn/problems/total-characters-in-string-after-transformations-ii/ 给你一个由小写英文字母组成的字符串 s&#xff0c;一个整数 t 表…...

【iOS】源码阅读(四)——isa与类关联的原理

文章目录 前言OC对象本质探索clang探索对象本质objc_setProperty源码探索 cls与类的关联原理为什么说bits与cls为互斥关系isa的类型isa_t原理探索isa与类的关联 总结 前言 本篇文章主要是笔者在学习和理解类与isa的关联关系时所写的笔记。 OC对象本质探索 在学习和理解类与isa…...