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

操作系统 | 学习笔记 | 王道 | 2.2处理机调度

2.2 处理机调度

文章目录

      • 2.2 处理机调度
        • 2.2.1 调度的概念
        • 2.2.2 调度的目标
        • 2.2.3 调度的实现
        • 2.2.4 典型的调度算法
        • 错题总结:

2.2.1 调度的概念

img

  1. 调度的基本概念

    处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效的原则)去选择一个进程并将处理机分配给它运行,以实现进程并发地执行。

  2. 调度对层次

    一个作业从提交开始直到完成,要经历以下三级调度,如下图所示。

    image-20230911135226560

    • 高级调度(作业调度)

      img

      内存空间有限时,无法将用户提交的作业全部放入内存,需要按一定的原则从外存的作业 后备队列 中挑选一个作业调入内存,并创建进程。

      每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。

      作业:一个具体的任务

      多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度。

      • 发生频率最低 外存→内存(面向作业)
    • 中级调度(内存调度)img

      内存不够时,可将某些进程的数据调出外存。等内存空闲或者进程需要运行时,按照某种策略从 挂起队列 中选择合适的进程重新调入内存。

      暂时调到外存等待的进程状态为挂起状态。被挂起的进程PCB会被组织成挂起队列。

      • 外存→内存(面向进程)
    • 低级调度(进程调度)

      img

      在内存中的按照某种策略从 就绪队列 中选取一个进程,将处理机分配给它。

      • 发生频率高 内存→CPU
  3. 三级调度的联系

    • 七状态模型

      在这里插入图片描述

      挂起和阻塞的区别: 两种状态都不获得 CPU 服务,但挂起状态将进程调到外存,而阻塞态还在内存中。

    • 三层调度对比

      要做什么在哪调度发生频率对进程状态影响
      高级调度 (作业调度)从后备队列中选择合适的作业 将其调入内存,并为其创建进程外存→内存 (面向作业)最低无→创建态→就绪态
      中级调度 (内存调度)从挂起队列中选择合适的进程 将其数据调回内存外存→内存 (面向进程)中等挂起态→就绪态 阻塞挂起→阻塞态
      低级调度 (进程调度)从就绪队列中选择一个进程 为其分配处理机内存→CPU最高就绪态→运行态
    • 三层调度联系

      • 1)作业调度为进程活动做准备,进程调度使进程正常活动起来。
      • 2)中级调度将暂时不能运行的进程挂起,中级调度处于作业调度和进程调度之间。
      • 3)作业调度次数少,中级调度次数略多,进程调度频率最高。
      • 4)进程调度是最基本的,不可或缺。
2.2.2 调度的目标

img

不同的调度算法具有不同的特性,在选择调度算法时,必须考虑算法的特性。评价标准如下。

  1. CPU利用率:指CPU“忙碌”的时间占总时间的比例。
    利用率 = 忙碌的时间 总时间 利用率=\frac{忙碌的时间}{总时间} 利用率=总时间忙碌的时间

  2. 系统吞吐率:单位时间内完成作业的数量。
    系统吞吐率 = 总共完成了多少道作业 总共花了多少时间 系统吞吐率=\frac{总共完成了多少道作业}{总共花了多少时间} 系统吞吐率=总共花了多少时间总共完成了多少道作业

  3. 周转时间:指从作业被提交给系统开始,到作业完成为止的这段时间间隔。
    周转时间 = 作业完成时间 − 作业提交时间 周转时间=作业完成时间-作业提交时间 周转时间=作业完成时间作业提交时间
    平均周转时间:指多个作业周转时间的平均值。
    平均周转时间 = 各个作业周转时间之和 作业数 平均周转时间=\frac{各个作业周转时间之和}{作业数} 平均周转时间=作业数各个作业周转时间之和
    带权周转时间:作业周转时间与作业实际运行时间的比值。带权周转时间必然≥1
    带权周转时间 = 作业周转时间 作业实际运行时间 = 作业完成时间 − 作业提交时间 作业实际运行时间 带权周转时间=\frac{作业周转时间}{作业实际运行时间}=\frac{作业完成时间-作业提交时间}{作业实际运行时间} 带权周转时间=作业实际运行时间作业周转时间=作业实际运行时间作业完成时间作业提交时间
    平均带权周转时间:多个作业带权周转时间的平均值。
    平均带权周转时间 = 各个作业带权周转时间之和 作业数 平均带权周转时间=\frac{各个作业带权周转时间之和}{作业数} 平均带权周转时间=作业数各个作业带权周转时间之和

  4. 等待时间

    等待时间,指进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低。
    等待时间 = 周转时间 − 运行时间 等待时间=周转时间-运行时间 等待时间=周转时间运行时间

    • 对于进程来说,等待时间就是指进程建立后等待被服务的时间之和。
    • 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间。

    平均等待时间:各个进程/作业等待时间的平均值。
    平均等待时间 = 各个进程 / 作业等待时间之和 进程 / 作业数 平均等待时间=\frac{各个进程/作业等待时间之和}{进程/作业数} 平均等待时间=进程/作业数各个进程/作业等待时间之和

  5. 响应时间:从用户提交请求到首次产生响应所用的时间。

2.2.3 调度的实现
  1. 调度程序(调度器)

    img

    img

    用于调度和分派CPU 的组件称为调度程序,它通带由三部分组成,如图所示。

    image-20230911150133174

    • 排队器:将系统中的所有就绪进程按照一定的策略排成一个或多个队列,以便于调度程序选择。每当有一个进程转变为就绪态时,排队器便将它插入到相应的就绪队列中。

    • 分派器:依据调度程序所选的进程,将其从就绪队列中取出,将CPU分配给新进程。

    • 上下文切换器:在对处理机进行切换时,会发生两对上下文的切换操作:

      • 第一对,将当前进程的上下文保存到其PCB中,再装入分派程序的上下文,以便分派程序运行;
      • 第二对,移出分派程序的上下文,将新选进程的CPU现场信息装入处理机的各个相应寄存器。
  2. 调度的时机

    img

    img

    • 需要调度
      • 主动放弃:进程正常终止;运行过程中发生异常而终止;主动阻塞(比如等待IO)
      • 被动放弃:时间片用完;有更紧急的事情处理(I/O中断);有更高优先级的进程进入就结队列
    • 不能调度
      • 处理中断的过程中
      • 进程在操作系统内核程序临界区中
      • 原子操作过程中

    临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。

    临界区:访问临界资源的那段代码。

    内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)

  3. 进程调度方式

    img

    • 非剥夺调度方式

      又称非抢占方式。即,只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。

      实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统

    • 剥夺调度方式

      又称抢占方式。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停在执行的进程,将处理机分配给更重要紧迫的那个进程。

      可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统

  4. 进程切换

    • 上下文切换:切换CPU到另一个进程需要保存当前进程状态并恢复另一个进程的状态。

      • 对原来运行进程各种数据的保存
      • 对新的进程各种数据的恢复(如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,这些信息一保存在进程控制块)

      上下文:某一时刻CPU寄存器和程序计数器的内容。

      切换流程:

      • 挂起一个进程,保存CPU上下文,包括程序计数器和其他寄存器。
      • 更新PCB信息。
      • 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
      • 选择另一个进程执行,并更新其PCB。
      • 跳转到新进程PCB中的程序计数器所指向的位置执行。
      • 恢复处理机上下文。
    • 上下文切换的消耗

      上下文切换需要消耗大量CPU时间,有些处理器有多个寄存器组,则切换只需改变指针。

      进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。

    • 上下文切换与模式切换

      • 模式切换是用户态和内核态之间的切换,CPU逻辑上可能还在执行同一进程。用户进程最开始都运行在用户态,若进程因中断或异常进入核心态运行,执行完后又回到用户态刚被中断的进程运行。
      • 上下文切换切换了进程,只能发生在内核态,它是多任务操作系统中的一个必需的特性。

    不能进行调度和切换的情况:

    1.处理中断的过程中

    2.需要完全屏蔽中断的原子操作过程中

  5. 闲逛进程

    调度程序永远的备胎,没有其他就绪进程时,运行闲逛进程(idle)

    特性

    • 优先级最低;
    • 可以是0地址指令,占一个完整的指令周期(指令周期末尾例行检查中断)
    • 能耗低

    闲逛进程不需要CPU之外的资源,它不会被阻塞。

  6. 两种线程的调度

    • 用户级线程调度。由于内核并不知道线程的存在,所以内核还是和以前一样,选择一个进程,并给予时间控制。由进程中的调度程序决定哪个线程运行。
    • 内核级线程调度。内核选择一个特定线程运行,通常不用考虑该线程属于哪个进程。对被选择的线程赋予一个时间片,如果超过了时间片,就会强制挂起该线程。

    用户级线程的线程切换在同一进程中进行,仅需少量的机器指令;

    内核级线程的线程切换需要完整的上下文切换、修改内存映像、使高速缓存失效,这就导致了若干数量级的延迟。

2.2.4 典型的调度算法

img

img

  1. 先来先服务(FCFS)

    • 算法思想:主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子)
    • 算法规则:按照作业/进程到达的先后顺序进行服务
    • 用于作业/进程调度:
      • 用于作业调度时,考虑是哪作业先达后备队列;
      • 用于进程调度时,考虑的是哪个进程先到达就绪队列
    • 优缺点:
      • 优点:公平、算法实现简单
      • 缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即,FCFS算法对长作业有利,对作(Eg:排队。)
    • 非抢占式的算法;不会导致饥饿

    img

    img

  2. 短作业优先(SJF)

    • 算法思想:追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间

    • 算法规则:最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)

    • 用于作业/进程调度

      • 即可用于作业调度,也可用于进程调度。
      • 用于进程调度时为"短进程优先"(SPF,Shortest Process First)
    • 优缺点

      • 优点:

        “最短的”平均等待时间、平均周转时间;

        • 在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少;
        • “抢占式的短作业/进程优先调度算法(最短剩余时间优先,SRNT算法)的平均等待时间、平均周转时间最少”
      • 缺点:不公平。对短作业有利,对长作业不利。可能产生饥饿现象。另外,作业进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先。

    • 抢占式的算法;会导致饥饿

      SJF和SPF是非抢占式的算法。但是也有抢占式的版本:最剩间优先算法(SRTN,Shortest Remaining Time Next)

      每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度

    img

    img

    img

    img

  3. 高响应比优先(HRRN)

    饿的越久,叫的越大声

    • 算法思想:要综合考虑作业/进程的等待时间和要求服务的时间

    • 算法规则:在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
      响应比 = 等待时间 + 要求服务时间 要求服务时间 响应比=\frac{等待时间+要求服务时间}{要求服务时间} 响应比=要求服务时间等待时间+要求服务时间
      高响应比优先算法:非抢占式的调度算法,只有当前运行的进程主动放CPU(常/常成,主动阻塞),需行调度,调度时计算所有就绪进程的响应比,选响应比最高的进程上处理机。

    • 用于作业/进程调度:即可用于作业调度,也可用于进程调度

    • 优缺点

      • 综合考虑了等待时间和运行时间(要求服务时间)等待时间相同时,要求服务时间短的优先(SJF的优点);
      • 要求服务时间相同时,等待时间长的优先(FCFS的优点)
      • 对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题
    • 非抢占式的算法;不会导致饥饿

      非抢占式的算法。因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,计算响应比

      img

      img

  4. 时间片轮转调度算法(RR)

    img

    img

    img

    • 算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应

    • 算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。

    • 用于作业/进程调度:用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)

    • 优缺点

      • 优点:公平;响应快,适用于分时操作系统;
      • 缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度。
    • 抢占式的算法;不会导致饥饿

      若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式的算法。由时钟装置发出时钟中断来通知CPU时间片已到

  5. 优先级调度算法

    • 算法思想:随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序

    • 算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程

    • 用于作业/进程调度:既可用于作业调度,也可用于进程调度。甚至,还会用于在之后会学习的I/O调度中

    • 优缺点

      • 优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度
      • 缺点:若源源不断地有高优先级进程到来,则可能导致饥饿
    • 抢占式/非抢占式的算法;会导致饥饿

      抢占式、非抢占式都有。做题时的区别在于:非抢占式只需在进程主动放弃处理机时进行调度即可,而抢占式还需在就绪队列变化时,检查是否会发生抢占。

    • 优先级排序

      系统进程优先级高于用户进程

      前台进程优先级高于后台进程

      操作系统更偏好I/O型进程(或称I/O繁忙型进程)

      注:与I/O型进程相对的是计算型进程(或称CPU繁忙型程)

    • 优先级分类:根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种。

      • 静态优先级:创建进程时确定,之后一直不变
      • 动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级。

      就绪队列未必只有一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置

      img

      img

      img

      img

  6. 多级队列调度算法

    • 系统中按进程类型设置多个队列,进程创建成功后插入某个队列

    image-20230911165310270

    • 队列之间可采取固定优先级,或时间片划分

      • 固定优先级:高优先级空时低优先级进程才能被调度
      • 时间片划分:如三个队列分配时间50%、40%、10%
    • 各队列可采用不同的调度策略,如

      系统进程队列采用优先级调度、交互式队列采用RR、批处理队列采用FCFS

  7. 多级反馈队列调度算法

    image-20230911165245192

    • 算法思想:对其他调度算法的折中权衡

    • 算法规则:

      • 1.设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
      • 2.新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经是在最下级的队列,则重新放回该队列队尾
      • 3.只有第k级队列为空时,才会为k+1级队头的进程分配时间片
    • 用于作业/进程调度:用于进程调度

    • 优缺点

      • 对各类型进程相对公平(FCFS的优点);
      • 每个新到达的进程都可以很快就得到响应(RR优点);
      • 短进程只用较少的时间就可完成(SPF优点);
      • 不必实现估程运时间(避用户作假);
      • 可灵活地调整对各类进程的偏好程度,比如CPU密集型进程、IO密集型进程

      拓展:可以将因I/O而阻塞的进程重新放回原队列,这样I/O型进程就可以保持较高优先级

    • 抢占式的算法;会导致饥饿

      在k级队列的进程运行过程中,若更上级的队列(1~k-1级)中进入了一个新进程,则由于新进程处于优先级更高的队列中,因此新进程会抢占处理机,原来运行的进程放回k级队列队尾。

    • img

    • img

先来先服务短作业优先高响应比优先时间片轮转多级反馈队列
能否是可抢占队列内算法不一定
能否是非抢占队列内算法不一定
优点公平,实现简单平均等待时间最少,效率最高兼顾长短作业兼顾长短作业兼顾长短作业, 有较好的的响应时间, 可行性强
缺点不利于短作业长作业会饥饿, 估计时间不易确定计算响应比的开销大平均等待时间较长, 上下文切换浪费时间
适用于作业调度, 批处理系统分时系统相当通用
默认决策模式非抢占非抢占非抢占抢占抢占
错题总结:

1.时间片轮转不能使系统高效,效率不会批处理,但是会让多个用户能够得到及时响应

2.处于临界区的进程在退出临界区前,可以被调度(中断或被抢占)

3.进程上下文不包括中断向量

4.上下文切换不包括主存和外村的数据交换

5.先来先服务利于cpu繁忙型作业,不利于IO繁忙型作业

6.多级反馈队列系统开销较大

7.降低进程优先级一般是进程执行完了以后进行降低

相关文章:

操作系统 | 学习笔记 | 王道 | 2.2处理机调度

2.2 处理机调度 文章目录 2.2 处理机调度2.2.1 调度的概念2.2.2 调度的目标2.2.3 调度的实现2.2.4 典型的调度算法错题总结: 2.2.1 调度的概念 调度的基本概念 处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效的原则&…...

我们项目要升级到flutter架构的几点原因

一、探索 Flutter打造卓越移动应用的新时代框架 在移动应用开发的世界里,Flutter已经成为了一个炙手可热的话题。诞生于Google的怀抱,Flutter以其独特的优势和理念,正在引领一场全球范围内的应用开发 ** 。本文将深入探讨Flutter项目的特点、…...

Solidity开发智能合约

05-Solidity开发智能合约 0 Solidity和智能合约 Solidity开发可运行的智能合约步骤: 源代码通过编译成字节码(Bytecode),同时会产生二进制接口规范(ABI) 通过交易将字节码部署到以太坊网络,部署…...

bind实验

服务端 查看域名 [rootclient yum.repos.d]# hostname client 设置域名 [rootclient yum.repos.d]# hostnamectl set-hostname dns1.openlab.edu [rootclient yum.repos.d]# cd [rootclient ~]# hostname dns1.openlab.edu 安装bind包 [rootclient ~]# yum install bind -y…...

ARM架构下安装新版docker及docker-compose

一、常见CPU 架构: 二、环境信息 CPU架构操作系统配置HUAWEI Kunpeng 920 5220 aarch64openEuler 22.03 (LTS-SP3)64C128g15T 三、安装docker 3.1 二进制包下载 docker-ce 社区下载地址: wget https://mirrors.nju.edu.cn/docker-ce/linux/static/s…...

自锁/非自锁开关原理笔记

前言:编写不易,请勿搬运,感谢理解,仅供学习。 开关介绍 6指针开关,这种开关分为自锁和非自锁开关,自锁开关有两种状态,按下和松开的状态,非自锁开关在按下过后,按键会复…...

基于SpringBoot+Vue的论坛网站-无偿分享 (附源码+LW+调试)

目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 研究目的 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 概述 7.2 系统流程和逻辑 7.3 系统结构 8. 数据库设计 8.1 数据库ER图 (1)问题反…...

基于SSM的博客系统+LW参考示例

1项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理,博文分类管理,博文信息管理,话题分类管理,热议话题管理,私信管理,敏感词管理,系统管理等&am…...

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布!Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新,简化了…...

webpack5开发环境、生产环境配置 (三)

开发环境:就是我们开发代码时使用的模式。 这个模式我们做两件事情: 1、编译代码,使浏览器能识别运行 2、代码质量检查,树立代码规范 生产环境:开发完成代码后,我们需要得到代码将来部署上线。 这个模式…...

一次Kafka启动失败引出的问题

背景 Some time,有个现场童鞋说咱的Kafka实例有个broker一直crash,还截图给我看了,大致是Kafka启动加载topic分区日志文件的时候,然后就没了,连个WARN都没有。当然,光看这个截图咱啥都不知道,因…...

[Linux] 进程间通信——匿名管道命名管道

标题:[Linux] 进程间通信——匿名管道&&命名管道 水墨不写bug (图片来源于网络) 目录 一、进程间通信 二、进程间通信的方案——匿名管道 (1)匿名管道的原理 (2)使用匿名管道 三、进…...

人机交互中的状态交互、趋势交互

在人机交互中, 状态交互 和 趋势交互 是两种重要的交互方式,它们分别涉及到用户与系统之间不同的交互模型和机制。 1. 状态交互 状态交互主要聚焦于用户与系统之间的状态转换及其反馈机制。在这种交互模式下,系统会根据用户的输入或行为发生状…...

基于Java Springboot房屋租赁App且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...

golang的wails框架在macos下的问题

1、前言 之前练手写了格调用ollama api的web应用,想找个容器打包下,于是找到wails来打包,windows下都是很正常的,因为就是普通的http调用,也没遇到cors跨域问题,但是到了macos下使用wails dev命令启动的客户…...

编程设计模式助记顺口溜

1、顺口溜 创建型,工厂多,单例建对象,抽象工厂做。建造者分步做,原型克隆最不愁。 结构型,适配器,桥接组合都不错,装饰外观飞享元,代理再添一把火。 行为型,责任链&…...

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议? 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介:本文章主要是演示如何用java代码以及TCP协议实现网络通信,实…...

mybatis-plus 对于属性为null字段不更新

MyBatis-Plus 默认情况下会根据字段的值是否为 null 来决定是否生成对应的 UPDATE 语句。这是由 更新策略 决定的,默认的行为是 忽略 null 值,即如果字段值为 null,该字段将不会出现在 UPDATE 语句中。 默认行为分析 MyBatis-Plus 默认的 Fi…...

GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记

1 Overall GAGAvatar(Generalizable and Animatable Gaussian Avatar),一种面向单张图片驱动的可动画化头部头像重建的方法,解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数 现有方法的局限性: 基于NeRF的方…...

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿,数据挖掘的小伙伴们!今天我要给你们介绍一本超级实用的书——《数据挖掘:概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作,由该领域的知名专家编写,系统性地介绍了在高维数据空间中分析和提取大量…...

springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中,我们完成订单的挂单和取单功能,今天我们完成购物车关联服务人员,用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…...

lua闭包Upvalue

闭包 lua任何函数都是闭包,闭包至少带1个upValue; CClosure是使用Lua提供的lua_pushcclosure这个C-Api加入到虚拟栈中的C函数,它是对LClosure的一种C模拟 如string.gmatch就是cclosure 定义: #define ClosureHeader \CommonH…...

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接: 二进制压缩包(推荐): ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…...

深入探索Flax:一个用于构建神经网络的灵活和高效库

深入探索Flax:一个用于构建神经网络的灵活和高效库 在深度学习领域,TensorFlow 和 PyTorch 作为主流的框架,已被广泛使用。不过,Flax 作为一个较新的库,近年来得到了越来越多的关注。Flax 是一个由Google Research团队…...

vue项目中单独文件的js不存在this.$store?.state怎么办

在Vue项目中,如果你在单独的文件(比如插件、工具函数等)中遇到this.$store不存在的情况,这通常是因为this上下文不指向Vue实例,或者Vuex store没有被正确地注入到Vue实例中。以下是几种可能的解决方案: 确保…...

物联网客户端在线服务中心(客服功能/私聊/群聊/下发指令等功能)

一、界面 私聊功能(下发通知类,一对多)群聊(点对点)发送指令(配合使用客户端,基于cefsharp做的物联网浏览器客户端)修改远程参数配置(直接保存到本地)&#…...

AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(二)

接上一篇AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(一) new_email 无论为什么文本,识别结果几乎都是垃圾邮件,因此我们需要对源码的逻辑进行梳理一下: 在代码中,new_email 无论赋值为何内容都被识别为…...

hint: Updates were rejected because the tip of your current branch is behind!

问题 本地仓库往远段仓库推代码时候提示: error: failed to push some refs to 192.168.2.1:java-base/java-cloud.git hint: Updates were rejected because the tip of your current branch is behind! refs/heads/master:refs/heads/master [rejected] (…...

Vue的数据驱动原理

文章目录 什么是数据驱动那么vuejs是如何实现这种数据驱动的呢?对getter/setter的理解?一个简单的演示例子vue数据驱动原理是:采用数据劫持结合发布者和订阅者模式,通过“object.defineproperty()”来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应…...

【Db First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

数据分析-52-时间序列分解之变分模态分解VMD

文章目录 1 时间序列模态分解1.1 模态分解的概念1.2 模态分解的作用1.3 常用的模态分解方法1.4 模态分解的常用库2 变分模态分解VMD2.1 VMD的流程2.2 加载数据集2.2.1 数据重采样2.2.2 原始数据可视化2.3 VMD变分模态分解3 参考附录1 时间序列模态分解 1.1 模态分解的概念 时…...

做异端中的异端 -- Emacs裸奔之路4: 你不需要IDE

确切地说,你不需要在IDE里面编写或者阅读代码。 IDE用于Render资源文件比较合适,但处理文本,并不划算。 这的文本文件,包括源代码,配置文件,文档等非二进制文件。 先说说IDE带的便利: 函数或者变量的自动…...

redhat 7.9配置阿里云yum源

1、mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2、添加dns vim/etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 114.114.114.114 #配置完先检查下通不通 3、vi /etc/yum/pluginconf.d/subscription-manager.conf # 将 “enabled1” 改为 “ena…...

简单快速的上手python

前言 python是一门可以快速上手的语言,原因是它语法简单,api容易使用自由灵活 当我们需要安装任何的三方库时,只需要执行 pip install XX 之后在代码里面import xxx就可以使用python啦。 并且python的代码自由灵活,使用缩进区…...

PHP和GD如何给图片添加模糊边缘效果

在PHP中,使用GD库给图片添加模糊边缘效果通常涉及几个步骤,包括加载图片、创建模糊效果、应用边缘处理以及保存结果图片。然而,GD库本身并不直接提供边缘模糊的函数,但你可以通过一些技巧来实现类似的效果。 以下是一个简化的步骤…...

PowerShell:查找并关闭打开的文件

Get-SmbOpenFile 打开 Windows PowerShell 并运行 Get-SmbOpenFile | Format-List 若要仅显示特定文件共享的连接,请使用 Where-Object 运行 Get-SmbOpenFile。 Get-SmbOpenFile | Where-Object Path -eq "C:\Data\" | Format-List Get-SmbSession 显…...

SQL进阶技巧:非等值连接--单向近距离匹配

目录 0 场景描述 1 数据准备 2 问题分析 ​编辑 ​编辑 3 小结 数字化建设通关指南 0 场景描述 表 t_1 和表 t_2 通过 a 和 b 关联时,有相等的取相等的值匹配,不相等时每一 个 a 的值在 b 中找差值最小的来匹。 表 t_1:a 中无重复值 表 t_1:a 中无重复值 a 1 2 4 …...

【golang】单元测试,以及出现undefined时的解决方案

单元测试 要对某一方法进行测试时,例如如下这一简单减法函数,选中函数名后右键->转到->测试 1)Empty test file 就是一个空文件,我们可以自己写测试的逻辑 但是直接点绿色箭头运行会出问题: 找不到包。我们要在…...

代理IP地址的含义与设置指南‌

在数字化时代,互联网已经成为我们日常生活不可或缺的一部分。然而,在享受互联网带来的便利的同时,我们也面临着隐私泄露、访问限制等问题。代理IP地址作为一种有效的网络工具,能够帮助我们解决这些问题。本文将详细介绍代理IP地址…...

Qt 2D绘图之三:绘制文字、路径、图像、复合模式

参考文章链接: Qt 2D绘图之三:绘制文字、路径、图像、复合模式 绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象…...

el-table 纵向 横向 多级表头

<el-table :data"tableData" class"diaTable":span-method"handleSpanMethod"border:header-cell-style"{background:#292929,color:#fff}"><!-- 纵向表头 --><el-table-column label"纵向表头" width"…...

linux perf安装问题解决

WARNING: perf not found for kernel 4.15.0-39 perf安装问题 perf是一个功能强大的linux性能分析工具&#xff0c;其功能依赖于内核&#xff0c;安装perf工具的版本必须与内核版本保持一致。 perf安装问题 使用apt 安装 perf包&#xff0c;运行时提示要安装与内核版本相一致…...

嵌入式Linux无窗口系统下搭建 Qt 开发环境

嵌入式Linux无窗口系统下搭建 Qt 开发环境 本文将介绍如何在树莓派的嵌入式 Linux 环境下&#xff0c;搭建 Qt 开发环境&#xff0c;实现无窗口系统模式&#xff08;framebuffer&#xff09;下的图形程序开发。 1. 安装 Qt 环境 接下来&#xff0c;安装核心 Qt 开发库以及与 …...

JSON vs 表单格式:两种常见请求格式的区别与应用

搞iOS UI 自动化的同时涉及到了给后端发送请求&#xff0c;请求数据的格式常用的有json格式和表单格式&#xff0c;这两种格式如何区分&#xff0c;如何使用&#xff0c;特此总结了一下。 表单格式&#xff08;Form Data&#xff09; 传统的 HTML 表单使用的请求体格式&#…...

通过torch.utils.data.DataLoader可提高深度学习的10倍运行的速度?

引言 在深度学习的训练过程中&#xff0c;数据加载是一个关键步骤&#xff0c;它直接影响到模型训练的效率。为了提高运行速度&#xff0c;我们通常会采用多种方法&#xff0c;比如数据预处理、多线程加载、缓存策略等。然而&#xff0c;有一个经常被忽视的优化点——调整torc…...

【QT】背景,安装和介绍

TOC 目录 背景 GUI技术 QT的安装 使用流程 QT程序介绍 main.cpp​编辑 Wiget.h Widget.cpp form file .pro文件 临时文件 C作为一门比较古老的语言&#xff0c;在人们的认知里始终是以底层&#xff0c;复杂和高性能著称&#xff0c;所以在很多高性能需求的场景之下…...

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前&#xff0c;我们学习了传输层中的TCP和UDP&#xff0c;重点是TCP协议&#xff0c;他帮我们解决具体到主机的哪个应用&#xff08;端口&#xff09;、传输的可靠&#xff08;序列号、校验和…...

Python中使用pip换源的详细指南

在Python开发过程中&#xff0c;我们经常需要安装各种第三方库。pip是Python的包管理工具&#xff0c;用于安装和管理Python库。然而&#xff0c;由于网络原因&#xff0c;有时访问默认的Python包索引&#xff08;PyPI&#xff09;可能会比较慢。这时&#xff0c;我们可以通过更…...

【Unity】WebGL全屏问题

1 前言 WebGL项目打包时不可避免的需要面对全屏化问题&#xff0c;或者说是占满网页的问题。这里讨论一下此问题。 2 全屏化 2.1 打包模板 WebGL在打包时可以选择不同的打包模板&#xff0c;其会影响最终打包好的项目在网页中的展现形式。可以在“Project Setting/Player/Set…...

基于大数据python 电商数据分析及推荐可视化系统(源码+LW+部署讲解+数据库+ppt)

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度&#xff08;部分学校只有一次答辩机会 没弄好就延迟…...