FCFS,SJF以及PSA进程调度算法效率的比较

优先级调度算法(PSA) 优先级调度算法,即给每个作业一个优先级,优先级越高越紧迫,应该先执行。 FCFS算法和SJF算法都可以看做一种特殊的PSA算法。 例如,在FCFS算法里,是将算法的到达时间当做优先级,先到达的优先级高。 在SJF算法里,将作业的服务时间看做优先级,服务时间短的优先级高。 //main.cpp #include "PSA.h" int main() { std:: 阅读详情

实现

下面是用 Java 程序比较 FCFS,SJF 和 PSA 算法效率的示例代码:

FCFS

思路

对于 FCFS 算法,我们可以定义一个 Process 类来表示一个进程,其中包含进程名称、到达时间和执行时间三个属性。然后我们可以定义一个 FCFS 类,其中包含一个 ArrayList 来存储所有的进程,并实现调度算法的逻辑。

源码

`

public class FCFS {
    private ArrayList<Process> processList;
​
    public FCFS(ArrayList<Process> processList) {
        this.processList = processList;
    }
​
    public void schedule() {
        // 按照进程的到达时间升序排序
        Collections.sort(processList, (p1, p2) -> p1.arrivalTime - p2.arrivalTime);
​
        int currentTime = 0;
        int waitingTime = 0;
        int turnaroundTime = 0;
​
        for (Process p : processList) {
            if (currentTime < p.arrivalTime) {
                currentTime = p.arrivalTime;
            }
            waitingTime += currentTime - p.arrivalTime;
            turnaroundTime += currentTime - p.arrivalTime + p.executionTime;
            currentTime += p.executionTime;
        }
​
        double averageWaitingTime = (double) waitingTime / processList.size();
        double averageTurnaroundTime = (double) turnaroundTime / processList.size();
​
        System.out.println("平均等待时间:" + averageWaitingTime);
        System.out.println("平均周转时间:" + averageTurnaroundTime);
    }
}
​

`

解释

在 FCFS 算法的示例代码中,我们定义了一个 Process 类来表示一个进程,包含进程名称、到达时间和执行时间三个属性。然后我们定义了一个 FCFS 类,其中包含一个 ArrayList 来存储所有的进程,并实现调度算法的逻辑。

调度算法的逻辑如下:

  • 首先,将进程列表按照到达时间升序排序。

  • 然后,遍历每一个进程

  • 如果当前时刻小于进程的到达时间,则将当前时刻更新为进程的到达时间。

  • 然后,计算等待时间和周转时间:

    • 等待时间 = 当前时刻 - 进程的到达时间
    • 周转时间 = 当前时刻 - 进程的到达时间 + 进程的执行时间
  • 最后,将当前时刻更新为当前时刻 + 进程的执行时间。

在遍历完所有的进程之后,我们可以计算平均等待时间和平均周转时间,以此来评估 FCFS 算法的性能。

最后,调用 FCFS 类的 schedule 方法来执行调度算法即可。

SJF

思路

对于 FCFS 算法,我们可以定义一个 Process 类来表示一个进程,其中包含进程名称、到达时间和执行时间三个属性。然后我们可以定义一个 FCFS 类,其中包含一个 ArrayList 来存储所有的进程,并实现调度算法的逻辑。

源码

`

public class SJF {
    private ArrayList<Process> processList;
​
    public SJF(ArrayList<Process> processList) {
        this.processList = processList;
    }
​
    public void schedule() {
        int currentTime = 0;
        int waitingTime = 0;
        int turnaroundTime = 0;
​
        while (!processList.isEmpty()) {
            // 找到当前时刻最先到达的,执行时间最短的进程
            Process p = processList.stream()
                    .filter(process -> process.arrivalTime <= currentTime)
                    .min((p1, p2) -> p1.executionTime - p2.executionTime)
                    .get();
​
            waitingTime += currentTime - p.arrivalTime;
            turnaroundTime += currentTime - p.arrivalTime + p.executionTime;
            currentTime += p.executionTime;
​
            processList.remove(p);
        }
​
        double averageWaitingTime = (double) waitingTime / processList.size();
        double averageTurnaroundTime = (double) turnaroundTime / processList.size();
​
        System.out.println("平均等待时间:" + averageWaitingTime);
        System.out.println("平均周转时间:" + averageTurnaroundTime);
    }
}
​

`

解释

在 SJF 算法的示例代码中,我们定义了一个 Process 类来表示一个进程,包含进程名称、到达时间和执行时间三个属性。然后我们定义了一个 SJF 类,其中包含一个 ArrayList 来存储所有的进程,并实现调度算法的逻辑。

调度算法的逻辑如下:

  • 使用 stream API 的 filter 和 min 方法来找到当前时刻最先到达的,执行时间最短的进程。

  • 然后,计算等待时间和周转时间:

    • 等待时间 = 当前时刻 - 进程的到达时间
    • 周转时间 = 当前时刻 - 进程的到达时间 + 进程的执行时间
  • 最后,将当前时刻更新为当前时刻 + 进程的执行时间。

在遍历完所有的进程之后,我们可以计算平均等待时间和平均周转时间,以此来评估 SJF 算法的性能。

最后,调用 SJF 类的 schedule 方法来执行调度算法即可。

PSA

思路

对于 PSA 算法,我们需要在 Process 类中增加一个优先级的属性,并在调度算法的逻辑上进行相应的修改。

如果进程在等待 CPU 时间的时间越长,就将它的优先级设为越高。这样,当进程获得 CPU 时间的机会时,就能够优先执行。这种算法能够有效地应对突发性的高优先级作业。

  • 首先,为每个进程设定一个初始优先级。
  • 然后,每当进程等待 CPU 时间超过一定的阈值,就将进程的优先级提高。
  • 当进程获得 CPU 时间时,按照优先级的高低进行调度。

需要注意的是,当进程执行完成后,需要将进程的优先级恢复为初始值。

源码

`

public class PSA {
    private ArrayList<Process> processList;
​
    public PSA(ArrayList<Process> processList) {
        this.processList = processList;
    }
​
    public void schedule() {
        int currentTime = 0;
        int waitingTime = 0;
        int turnaroundTime = 0;
​
        while (!processList.isEmpty()) {
            // 找到当前时刻最先到达的,优先级最高的进程
            Process p = processList.stream()
                    .filter(process -> process.arrivalTime <= currentTime)
                    .max((p1, p2) -> p1.priority - p2.priority)
                    .get();
​
            waitingTime += currentTime - p.arrivalTime;
            turnaroundTime += currentTime - p.arrivalTime + p.executionTime;
            currentTime += p.executionTime;
​
            processList.remove(p);
        }
​
        double averageWaitingTime = (double) waitingTime / processList.size();
        double averageTurnaroundTime = (double) turnaroundTime / processList.size();
​
        System.out.println("平均等待时间:" + averageWaitingTime);
        System.out.println("平均周转时间:" + averageTurnaroundTime);
    }
}

`

解释

首先,在示例代码中,我们定义了一个 Process 类来表示一个进程,包含进程名称、到达时间、执行时间和剩余执行时间四个属性。然后我们定义了一个 PSA 类,其中包含一个 ArrayList 来存储所有的进程,并实现调度算法的逻辑。

调度算法的逻辑如下:

  • 首先,将进程列表按照到达时间升序排序。

  • 然后,循环执行以下步骤,直到进程列表为空:

    • 从进程列表中取出第一个进程,并将其从列表中移除。
    • 如果当前时刻小于进程的到达时间,则将当前时刻更新为进程的到达时间。
    • 如果进程的剩余执行时间大于时间片,则执行时间片的长度;否则,执行进程剩余的所有时间。
  • 计算等待时间和周转时间:

    • 等待时间 = 当前时刻 - 进程的到达时间
    • 周转时间 = 当前时刻 - 进程的到达时间 + 进程的执行时间
  • 如果进程的剩余执行时间为 0,则将进程从进程列表中移除;否则,将进程插入进程列表的末尾。

  • 将当前时刻更新为当前时刻 + 执行的时间。

在遍历完所有的进程之后,我们可以计算平均等待时间和平均周转时间,以此来评估 PSA 算法的性能。

最后,调用 PSA 类的 schedule 方法来执行调度算法即可。

三种方法效率比较

都以相同的开始时间、进行时间、以及优先级进行比较

arr[0]={0,20,2};

arr[1]={5,15,1};

arr[2]={10,5,4};

arr[3]={15,10,3};

优先级是为了比较PSA的两种抢占效率(抢占式、非抢占式).

FCFS

FCFS.png

SJF

SJF.png

PSA

抢占式

PSA抢占式.png

非抢占式

PSA.png

总结:

FCFS 算法是一种简单的调度算法,它按照进程的到达时间顺序依次执行进程,不考虑进程的执行时间。由于不能有效地应对短作业,因此 FCFS 算法的效率并不高。

SJF 算法是一种较高效的调度算法,它优先执行执行时间较短的进程,能够有效地应对短作业。但是,SJF 算法不能有效地应对突发性的高优先级作业。

PSA 算法是一种动态调度算法,它根据进程的等待时间动态调整进程的优先级,能够有效地应对突发性的高优先级作业。但是,PSA 算法的实现较为复杂,因此其运行效率略低于 SJF 算法。

总的来说,SJF 算法的效率略高于 PSA 算法,而 FCFS 算法的效率较低。不同的调度算法适用于不同的场景,应根据实际需要选择合适的调度算法。

OS之进程调度 处理机调度 在多道程序程序的环境中,内存中存在着多个进程,进程往往大于处理机数目,这就要系统按照某种算法,动态的将处理机分配给处于就绪状态的进程。是之执行,分配处理机的任务就是由处理机调度完成的。调度实质上是一种资源分配。 处理机调度算法的目标: 处理价调度算法的共同目标: 1:资源利用率,为了提高资源的利用率,应是系统中的处理机和其他资源尽可能保持忙碌状态。 2:公平性:是所有的进程都 阅读详情

相关推荐

非抢占式优先级调度算法

1、实验目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解 2、实验内容 (1)用C语言来实现对N个进程采用动态优先权优先算法的进程调度 (2)每个用来标示进程的PCB用结构来描述,包括字段如下: 进程标示数ID. 进程优先级Priority 进程已占用的CPU时间 CPUTIME 进程还需占用的CPU时间 ALLTIME。进程运行完毕时,ALLTIME变为0。 进程的阻塞时间StartBlock,表示当进程再运行StartBlock个时间片后, 进程将入阻塞状态。 进程被阻塞时间BlockTime,表示已经阻塞的进程再等待BlockTime个时 间片后,将转换为就绪状态。 进程状态State (3)进程优先级改变原则 进程在就绪队列中呆一个时间片,优先级加1 进程运行一个时间片,优先级减3 (4)为了清楚的观察各进程的调度过程,程序应将每个时间片的进程的情况显示。出来

【操作系统】-- 先来先服务算法(FCFS)、短作业优先算法(SJF)、高响应比调度算法(HRRN)

主要从公平的角度考虑。按照 作业/进程 到达的先后顺序进行服务。非抢占式算法。不会导致饥饿。优点:公平、算法实现简单。缺点:对长作业有利,对短作业不利。追求最少的平均等待时间、最少的平均周转时间和平均带权周转时间。最短的 作业/进程 优先得到服务。非抢占式,抢占式版本:最短剩余时间优先算法。 会,如果有源源不断的短作业到来,可能使长作业长时间得不到服务。优点:“最短的“平均等待时间、平均周转时间缺点:不公平,对短作业有利,对长作业不利,可能产生饥饿现象。要综合考虑 作业/进程 的等待时间和要求服务时间在每次

个人博客 2万+

采用非抢占式短作业优先算法的进程调度程序

在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个,且进程之间也存在着同步与互斥的关系,要求采用指定的调度策略,使系统中的进程有条不紊地工作

处理机调度算法

处理机调度算法 处理机的调度层次 1.高级调度:(长程调度/作业调度) 外存—>内存(面向作业) [无—>创建态—>就绪态] 2.低级调度:(进程调度/短程调度) 内存—>CPU 对象:进程 [就绪态—>运行态] 3.中级调度: 外存<—>内存 实际上就是存储器管理中的对换功能 调度类别 作业调度 先来先服务调度算法(FCFS) 短作业优先调度算法 (SJF) 优先级调度算法(PSA) 高响应比优先算法(HRRN) 先来先服务调度算法(FCFS) 算法思想:系统

四块的博客 1852

飞书+扣子+DeepSeek三件套:5分钟搞定公众号文章批量改写(附完整配置截图)

本文详细介绍了如何利用飞书、扣子和DeepSeek三款工具,无需编程即可搭建一个高效的公众号文章批量改写自动化工作流。通过飞书多维表格管理链接与成果,扣子平台串联整个流程,并调用DeepSeek智能体进行内容润色与改写,实现从内容抓取到智能处理的完整自动化,大幅提升新媒体运营效率。

python9snake的博客 208

Simulink/Requirements Toolbox 学习(一):概述

编写、导入、导出需求并使需求正式化;两种创建需求的模块:需求编辑器、需求透视;描述需求的方式:文本、图像和关键字;通过导入和导出需求文件,与第三方需求管理工具(例如 Microsoft Word、Microsoft Excel®、IBM DOORS和 IBM DOORS Next)集成。涉及模块:Requirements Eidtor、Requirements Table等;

855

计算机操作系统——FCFS和SJF两种进程调度算法的比较

FCFS(First-come first-served)先来先服务调度算法 ​​​​​​​核心思想:FCFS算法是指进程调度时是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行的一种调度算法。 作用对象:既可用于作业调度,又可以用于进程调度。 缺点 不利于短作业 SJF(Short Job First)短作业优先调度算法 核心思...

Cap220590的博客 1万+

solidworks实体显示线框

solidworks实体莫名其妙显示为有点虚的线框

qq_35858902的博客 1万+

操作系统—进程调度算法

进程调度也称低级调度或短程调度,在多批道处理、分时和实时三种OS中都必须配置。作业调度也称高级调度或长程调度,多用于多批道处理系统中。在处理机调度时,我们运用不同的算法来实现更短时间或更优解的资源分配。(统称用进程调度来实现)

weixin_58144700的博客 1516

STM32H5 USB虚拟串口:用Classic驱动移植CDC实践

USB虚拟串口(CDC)是嵌入式系统最常用的主机通信方式之一,本质是借助USB协议模拟串口收发,无需额外驱动即可在PC上生成COM口。其实现依赖USB设备协议栈完成枚举、控制传输与批量传输。传统USBD Classic库不依赖RTOS,代码轻量、调用链短,非常适合裸机或轻量状态机架构;而USBX功能强大但需要ThreadX内核,资源开销较大。在电机控制器、传感器采集等场景中,日志输出与参数配置仅需简单的双向数据通道,Classic驱动往往更务实。本文基于STM32H5平台,详细梳理了使用Classic驱动移

weixin_29178069的博客 334

从JTAG到AS模式:一文搞懂EP4CE10E22C8N所有配置引脚(MSEL, nCONFIG, DATA0)的用法

本文深入解析EP4CE10E22C8N FPGA的配置引脚(MSEL, nCONFIG, DATA0)在不同模式下的使用方法,特别关注从JTAG到AS模式的切换要点。通过详细的配置模式对比、状态机分析和PCB布局建议,帮助开发者避免常见陷阱,提升FPGA配置成功率。

weixin_33713350的博客 319

FCFS,SJF以及PSA进程调度算法的比较

下面是用 Java 程序比较 FCFS,SJF 和 PSA 算法效率的示例代码:思路对于 FCFS 算法,我们可以定义一个 Process 类来表示一个进程,其中包含进程名称、到达时间和执行时间三个属性。然后我们可以定义一个 FCFS 类,其中包含一个 ArrayList 来存储所有的进程,并实现调度算法的逻辑。源码` `解释在 FCFS 算法的示例代码中,我们定义了一个 Process 类来表示一个进程,包含进程名称、到达时间和执行时间三个属性。然后我们定义了一个 FCFS 类,其中包含一个 Arra

m0_57042151的博客 695

VisionTransformer改进(11):结合CoordAtt注意力机制

​​CoordAtt模块​​:一个轻量级的坐标注意力机制​​ViT模型​​:基于标准Vision Transformer架构,但集成了CoordAtt模块模型最终通过CNNModel函数封装,虽然名称是CNN,但实际上是一个Transformer模型。引入了轻量级的CoordAtt注意力机制,增强了模型对空间位置信息的捕捉能力保持了ViT的主要优势,同时通过注意力机制提升了特征表示能力设计简洁高效,适合作为基础模型进行进一步研究和应用。

2401_82355416的博客 701

操作系统进程调度算法(Java 实现)

FCFS(First Come First Server,先来先服务)这是最简单,最基本的算法,它的思想非常简单,就是按照进程到来的时间顺序,逐个分配 CPU 资源 优点:简单,方便 缺点:效率低,资源利用率低/** * CPU 占用情况 * 1: 空闲 * 0: 正被占用 */ static int CPU = 1; /** * 等待队列长度 */ static

WhataNerd的博客 1万+

把 LLM 编排能力塞进 ABAP 系统里,ZLLM 仓库的工程价值与 SAP 落地场景

ZLLM项目将LLM应用开发中的常见工程问题引入ABAP原生环境,为SAP系统提供AI工作流构建能力。它类似ABAP版的LangChain,支持Chain组合、Prompt模板、状态传递等核心功能,强调纯ABAP实现、延迟执行以及与ABAP数据结构的深度集成。项目包含工厂类、LLM客户端、负载均衡器等模块,特别设计了能处理ABAP内表和结构的模板引擎,使业务数据可直接用于Prompt生成。通过Step和Flow机制支持复杂业务过程编排,并采用延迟执行和并行处理优化批量任务性能。该项目为ABAP开发者提供了在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 61

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

作业与作业调度--四种调度算法

当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是最优先考虑在系统中等待时间最长的作业,不管作业执行时间的长短。在进程调度中,采用FCFS算法时,每次调度就是从就绪队列中选择最先进入该队列的进程,为其分配处理机,运行。响应比 = (作业等待时间 + 作业运行时间)/ 作业运行时间 = 1 + 作业等待时间 / 作业运行时间。基于作业紧迫程度,赋予作业响应的优先级,系统从后备队列获取优先级高的进程优先执行。优先级动态变化,既可以考虑到作业进入系统的次序,又能考虑到作业运行的时间。

princekin_even的博客 7872

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机操作系统——作业调度算法

文章目录一、作业的基本知识1.作业和作业步2.作业运行的三个阶段二、先来先服务(FCFS)调度算法1.算法思想2.算法评价三、短作业优先(SJF)调度算法1.算法思想2.算法评价四、优先级调度算法(PSA)1.算法思想2.算法评价五、高响应比优先调度算法(HRRN) 一、作业的基本知识 1.作业和作业步 (1)作业:作业是一个比程序更为广泛的概念,包含通常的程序和数据,还有一份作业说明书。系统根据该说明书来对程序的运行进行控制。 (2)作业步:在作业运行期间,每个作业都必须经过若干个相对独立,又相互关联.

yi_chengyu的博客 3827

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

进程调度算法设有4个进程J1,J2,J3,J4.它们的到达时间和要求服务时间如下

设有4个进程J1,J2,J3,J4.它们的到达时间和要求服务时间如下表所示(优先级数越大优先级越高)。若这4个作业在—台处理机上按单道方式运行,采用FCFS、SJF(非抢占式),PSA(抢占式、非抢占式)、响应比高者优先调度算法。 1)试写出各作业的执行顺序; 2)求各作业的周转时间及平均周转时间。 3)求各作业的带权周转时间及平均带权周转时间。 进程 到达时间 服务时间 优先级 P1 8:00 2小时 1 P2 8:30 40分钟 2 P3 9:00 25分钟 3 P4 9:30 30分钟 4 FCFS

qq_52185773的博客 2252

操作系统|进程调度

进程调度 进程调度室操作系统必不可少的一种调度。因此在三种类型的OS(DOS、Windows、Linux),都无一例外地配置了进程调度。此外它也是对系统性能影响最大的一种处理机调度。 进程调度的任务 保存处理机的现场信息。在进行调度时首先需要保存当前进程的处理机的现场信息,如程序计数器、多个通用寄存器中的内容。 按某种算法选取进程。调度程序按某种算法从就绪队列中选取一个进程,将其状态改为运行...

Zero_H的博客 864

【OS学习】进程4-调度算法

RRMFQ按进程到达就绪队列的顺序,轮流分配一个时间片去执行,时间片用完则剥夺设置多个按优先级排序的就绪队列,优先级从高到低,时间片从小到达,新进程采用队列降级法:首先进入第一级队列,按FCFS分时间片,时间片用完后没有执行完再分到第二季,第三级...平均等待/周转时间最少。

qq_58381908的博客 321

基于swing的模拟操作系统作业调度算法可视化系统、功能完整

本次介绍模拟操作系统作业调度系统,整个系统还是做的非常好,项目涉及到操作系统知识、UI技术、多线程技术等,是一个实战性很强的项目。系统主要根据用户输入的作业数量、和开始时间、结束时间、优先级图形化展示:FCFS、SJF、PSA、HRRN四种调度算法的运行结果。

bangxiecode的博客 599

处理机调度那些事(二)--------进程调度

文章目录前言进程和进程调度1. 引起进程调度的因素2. 进程调度的任务3. 进程调度机制4. 进程调度方式5. 进程调度的算法a. 先来先服务调度算法b. 短作业优先调度算法c. 优先级调度算法d. 多队列调度算法e. 多级反馈队列调度算法f. 基于公平原则的调度算法 前言 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp

Mmmmmmmi 1110

【操作系统】七大处理机调度算法详解

本文旨在详细介绍处理机调度的基本概念、算法原理,并通过实例分析来加深对处理机调度算法的理解。本文将介绍包括先来先服务(FCFS)、短作业优先(SJF)、优先级调度(PSA)、高响应比优先(HRRN)、轮转法(RR)、多级反馈队列调度算法

w123456789ABCDEF的博客 6666

计算机操作系统 调度算法

处理机调度 1. 总述 1.1 处理机调度层次 高级调度:调度对象是作业,决定将外存中的哪些作业调入内存,并创建进程,分配必要资源,然后放入就绪队列。 中级调度:也称内存调度,该调度的目的是提高内存利用率和系统吞吐率。把阻塞进程调到外存等待,当外存的进程进入就绪状态后,再调入内存。 低级调度:调度对象是进程。决定就续队列中的哪些进程能获得处理机。 1.2 调度算法目标 处理机调度算法最重要的共同目标就是提高CPU的利用率,同时能保证公平性就最好了。但是对于不同的系统有不同的要求。 像批处理系统则希望周转周

weixin_55741551的博客 1857

操作系统之处理机调度算法

处理机调度算法 在多道程序系统中,调度实际上是一种资源分配,即对处理机资源的分配;处理机调度算法是指根据处理机分配策略所规定的处理机分配方法; 处理机调度 处理机调度的层次 高级调度 高级调度又称为长程调度或者作业调度;其调度对象是作业;主要功能是根据调度算法决定从外存中的后备队列中选择哪几个作业调入内存,为它们创建进程、分配必要的资源,然后将其放入就绪队列。高级调度主要用于多道批...

博采众长,自成一派; 4901
上一篇: 软件项目和其他项目的区别
下一篇: 2023APMCM E题(核弹)思路以及源码,持续更新中
李  忘  忧
博客等级 码龄6年 35粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 忘 忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值