CN111831436A - Io请求的调度方法、装置、存储介质及电子设备 - Google Patents

Io请求的调度方法、装置、存储介质及电子设备 Download PDF

Info

Publication number
CN111831436A
CN111831436A CN202010627342.1A CN202010627342A CN111831436A CN 111831436 A CN111831436 A CN 111831436A CN 202010627342 A CN202010627342 A CN 202010627342A CN 111831436 A CN111831436 A CN 111831436A
Authority
CN
China
Prior art keywords
thread
requests
queue
threads
type
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010627342.1A
Other languages
English (en)
Inventor
周华材
张诗明
郭健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN202010627342.1A priority Critical patent/CN111831436A/zh
Publication of CN111831436A publication Critical patent/CN111831436A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5021Priority
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例公开了一种IO请求的调度方法、装置、存储介质及电子设备,其中,当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断第一使用数量是否小于第一阈值;当第一使用数量小于第一阈值时,对第一队列中的IO请求进行分配,其中,第一类线程为执行用户交互事件中相关任务的线程;当第一使用数量不小于第一阈值时,对第二队列中的IO请求进行分配,其中,第二队列中的IO请求为第二类线程发送的IO请求。基于此,对线程分类别管理,并优先派发执行用户交互事件中相关任务的线程,使得这类线程能够更快地获取到IO资源,从整体上提高IO通道的分配效率,避免用户交互场景出现卡顿。

Description

IO请求的调度方法、装置、存储介质及电子设备
技术领域
本申请涉及电子设备技术领域,具体涉及一种IO请求的调度方法、装置、存储介质及电子设备。
背景技术
随着电子设备的发展,电子设备如智能手机、平板电脑等,其系统中的存储器件大多可以支持多个物理通道。对于这种多通道存储器来说,常规的IO请求派发机制为:建立一个调度派发队列,按照先后顺序将IO请求加入该调度派发队列,并按照该队列中的顺序依次派发。
发明内容
本申请实施例提供一种IO请求的调度方法、装置、存储介质及电子设备,能够提高IO通道分配效率,避免用户交互场景出现卡顿。
第一方面,本申请实施例提供一种IO请求的调度方法,包括:
当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
当所述第一使用数量小于所述第一阈值时,对第一队列中的IO请求进行分配,其中,所述第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程;
当所述第一使用数量不小于所述第一阈值时,对第二队列中的IO请求进行分配,其中,所述第二队列中的IO请求为第二类线程发送的IO请求。
第二方面,本申请实施例还提供一种IO请求的调度装置,包括:
数量获取模块,用于当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
第一分配模块,用于当所述第一使用数量小于所述第一阈值时,对第一队列中的IO请求进行分配,其中,所述第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程;
第二分配模块,用于当所述第一使用数量不小于所述第一阈值时,对第二队列中的IO请求进行分配,其中,所述第二队列中的IO请求为第二类线程发送的IO请求。
第三方面,本申请实施例还提供一种存储介质,其上存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如本申请任一实施例提供的IO请求的调度方法。
第四方面,本申请实施例还提供一种电子设备,包括处理器和存储器,所述存储器有计算机程序,所述处理器通过调用所述计算机程序,用于执行如本申请任一实施例提供的IO请求的调度方法。
本申请实施例提供的技术方案,第一类线程为执行用户交互事件中相关任务的线程。当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,如果该第一使用数量小于第一类线程对应的第一阈值,则优先分配第一队列中的IO请求,使得这类线程能够更快地获取到IO资源,反之,当第一使用数量不小于该第一阈值时,说明第一类线程已经占用较多的IO通道,此时可以对第二队列中的IO请求进行分配。通过这种方式,对线程分类别管理,并优先派发执行用户交互事件中相关任务的线程,使得这类线程能够更快地获取到IO资源,从整体上提高IO通道的分配效率,避免用户交互场景出现卡顿。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的IO请求的调度方法的第一种流程示意图。
图2为本申请实施例提供的IO请求的调度方法的第二种流程示意图。
图3为本申请实施例提供的IO请求的调度方法的一种应用场景示意图。
图4为本申请实施例提供的IO请求的调度装置的结构示意图。
图5为本申请实施例提供的电子设备的第一种结构示意图。
图6为本申请实施例提供的电子设备的第二种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种IO请求的调度方法,该IO请求的调度方法的执行主体可以是本申请实施例提供的IO请求的调度装置,或者集成了该IO请求的调度装置的电子设备,其中该IO请求的调度装置可以采用硬件或者软件的方式实现。其中,电子设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
请参阅图1,图1为本申请实施例提供的IO请求的调度方法的第一种流程示意图。本申请实施例提供的IO请求的调度方法的具体流程可以如下:
在101中,当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断第一使用数量是否小于第一阈值。
本申请实施例的方案可以应用于至少有三个以上IO通道的存储器的电子设备。例如,UFS存储器(Universal Flash Storage,通用闪存存储)。下文以UFS存储器为例对本申请的实施例进行说明。UFS存储设备可以支持32个普通IO通道。
相关技术中,电子设备对IO请求的调度策略一般为,从一个队列进行派发,按先到先派发的原则,依次分配IO请求至IO通道。但是,这种单一的调度策略容易出现交互场景的卡顿。比如后台应用在进行下载,这时后台的IO请求可能占满了UFS所有IO通道,如果这时一些与用户交互的线程,如微信线程的IO请求可能需要等待,从而导致了用户可感知的卡顿。
本申请为了解决这一问题,将线程划分为优先级不同的多类线程。为了避免交互场景下出现卡顿,就要识别出那些与用户体验相关线程,优先为这些线程分配IO资源。基于此,分别为每一类线程设置可以使用的IO通道的最多通道数和最少通道数。例如,以电子设备的存储器支持32个普通IO通道为例,假设将全部线程划分为第一类线程和第二类线程,第一类线程的最多通道数为第一阈值,即第一类线程最多可以同时占用的IO通道数量为第一阈值,比如25个;第一类线程的最少通道数为第五阈值,比如5个,也就是说,即使第二类线程的IO请求比较多,而第一类IO请求比较少的情况下,也会为第一类线程预留不少于5个IO通道,通过这种方式,当有新的第一类线程的IO请求时,可以及时地为其分配IO资源。
其中,第一类线程的优先级大于第二类线程的优先级。优先级越高,则该类线程的最多通道数和最少通道数均越大。例如,在一实施例中,第一类线程的最多通道数为25、最少通道数为10;第二类线程的最多通道数为22、最少通道数为7。
此外,本申请实施例中,对于每一类型的线程设置一个队列。例如,将与用户体验相关的线程发送的IO请求都添加至第一队列,将除与用户体验相关的线程以外的其他线程发送的IO请求都添加至第二队列。
本申请实施例中,电子设备的操作系统可以是基于linux内核的系统,例如,安卓操作系统等。电子设备的系统进程和应用程序的进程的运行,都需要系统内核为其分配内存空间。并且随着系统的运行情况,内核不断地进行着内存的回收与分配等。
线程是进程的一条执行路径,是程序执行时的最小单位,也是内存分配的基本单位。一个进程可以有多个线程,但至少有一个线程。
对于内核来说,在进行资源调度时,比如CPU调度,都是具体到某个线程的。进程内有一个主线程,它也会创建出很多子线程来协助工作。比如一个内容交互应用程序的进程,它会创建一个主线程来执行代码,执行途中也会创建其它子线程来协助运行各部分的任务代码。
其中,上层调用submit_bio()向内核层提交IO请求,内核在接受到IO请求后,由IO调度器将该IO请求添加至IO队列中,并负责对该IO请求进行调度。
执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,故本申请实施例中,确定出执行用户交互事件中相关任务的线程,并将这些与用户体验紧密相关的线程记为ux(user experience,用户体验)线程,即第一类线程。本申请实施例中,将除ux线程之外的线程记为第二类线程。第二类线程的运行情况一般不会影响用户体验,或者对用户体验影响较小。
其中,电子设备的系统架构至少包括应用框架(framework)层和内核(kernel)层,本申请实施例,从应用框架层和内核层的角度对ux线程进行识别和标记,例如,应用框架层为一些直接执行用户交互事件中相关任务的线程添加第一预设标签,以将这些线程标记为静态ux线程,内核层将一些间接地影响到用户交互事件中相关任务执行的线程标记为动态ux线程。
本申请实施例中的进程包括系统级进程和应用级进程。由于产生用户可感知的界面的卡顿的场景多是相对于运行在前台的进程来说的。因此,本申请实施例的方案中,“确定出执行用户交互事件中相关任务的线程”包括:在检测到有进程切换到前台运行时,确定前台进程;从该前台进程的线程中确定出用于执行用户交互事件中相关任务的线程,作为目标线程。
例如,在一实施例中,“从前台进程的线程中确定出用于执行用户交互事件中相关任务的目标线程,并将目标线程标记为第一类线程”包括:从前台进程的线程中识别出用于执行用户交互事件中相关任务的第一预设线程,作为目标线程;为目标线程添加第一预设标签,以将线程标记为第一类线程。
例如,上述第一预设线程包括进程运行时创建的一些用于直接执行用户交互事件的相关任务的线程,如UI(user interface,用户界面)线程,Render(渲染)线程,GL线程,用户输入事件的分发线程,用户输入事件的检测线程等,其中,GL线程为OGL(Open GraphicsLibrary,开放图形库)的渲染线程。这些线程是否能够流畅运行决定着是否会在用户与该进程的交互界面中产生用户可感知的卡顿。
比如,用户使用聊天软件与某一好友聊天,用户在对话框输入文字,电子设备通过服务器将用户输入的文字发送至该好友的电子设备。在这次交互事件中,需要UI线程、Render线程、用户输入事件的分发线程、用户输入事件的检测线程等线程共同工作,以完成本次用户交互事件,其中,每一个线程的运行都需要系统为其分配资源。因此,在检测到该聊天软件在前台运行时,识别出这些线程,将其标记为ux线程。
其中,第一预设线程一般是应用级线程,这些线程可以是通过对实际的卡顿场景进行分析来确定。比如,在测试中,如果某一用户交互场景下发生了应用卡顿,通过对该场景分析发现卡顿现象是某个线程处理任务太慢导致的,则可以认为该线程是用于执行用户交互事件中相关任务的,该线程的运行与用户体验紧密相关,可以将该线程作为第一预设线程。
基于此,可以通过对各种可能的卡顿场景进行测试,记录这些导致卡顿出现的线程。电子设备中存储这些第一预设线程的相关信息,当进程切换到前台运行时,将该进程下的属于预先记录的第一预设线程的线程都标记为ux线程。
可以理解的是,对于电子设备来说,存储的第一预设线程的相关信息并不是不可修改的,当进行系统升级时,可以对第一预设线程的相关信息进行更新。
此外,在另一实施例中,该方法还包括:当检测到有第二预设线程创建时,将创建的第二预设线程标记为第一类线程,其中,第二预设线程为系统级线程。
由于在执行用户交互事件的过程中,除了应用级线程之外,可能还涉及到一些系统级的线程来完成任务,系统框架层也需要将这些系统级线程标记为ux线程。一般这些线程在系统启动时就会创建,因此,可以在检测到系统启动时,识别出这些线程并进行标记,比如,Surfaceflinger线程(图层合成线程)、系统动画线程等。或者,在系统运行过程中,如果检测到有新的系统进程的线程创建并用来执行用户交互事件中相关任务,系统框架层也将这些线程标记为ux线程。比如,SystemUI(系统界面)线程。其中,第二预设线程也可以通过对实际的卡顿场景进行分析来确定。比如,在测试中,如果某一用户交互场景下发生了应用卡顿,通过对该场景分析发现卡顿现象是某个系统级线程处理任务太慢导致的,则可以认为该系统级线程是用于执行用户交互事件中相关任务的,该系统级线程的运行与用户体验紧密相关,可以将该系统级线程作为第二预设线程。电子设备中存储这些第二预设线程的相关信息,如果检测到系统创建了这些线程,则将其标记为ux线程。
其中,第一预设标签可以为ux标签,其添加方式如下:Linux使用task_struct(任务结构)结构体描述和记录线程,每个线程都有对应的task_struct结构体。task_struct中记录了线程的名称、标识符、状态、优先级、内存指针、上下文数据等属性信息。因此,应用框架层可以在task_struct结构体中增加对应的ux flag成员,以将前台进程的UI线程、Render线程、GL线程等执行用户交互事件中相关任务的线程,通过标记ux flag位(ux标志位),使内核层能够识别该线程的任务属性。
需要说明的是,上述几种静态ux线程仅为举例说明,并不局限于此,只要是直接地执行用户交互事件中相关任务的线程,使得其运行情况直接地影响到用户体验的线程,都可以将其标记为静态ux线程。对于应用框架层来说,在检测到新创建的线程是用来执行用户交互事件,或者检测到某些常驻系统级线程是用以处理用户交互事件时,为这些线程添加ux标签,以将其标记为静态ux线程。
在另一实施例中,“从前台进程的线程中确定出用于执行用户交互事件中相关任务的目标线程,并将目标线程标记为第一类线程”还包括:在前台进程的运行过程中,当检测到有新线程创建时,确定新创建的线程是否用于执行用户交互事件中的相关任务;当新创建的线程用于执行用户交互事件中的相关任务时,将新创建的线程标记为第一类线程。
前台进程在运行过程中,如果有用户交互事件发生,除了上述应用级的第一预设线程和系统级的第二预设线程之外,还可能会有一些临时创建的任务线程,这些任务线程的运行也会直接影响到是否会在用户与该进程的交互界面中产生用户可感知的卡顿。因此,应用框架层会将这些线程也标记为ux线程。
其中,电子设备根据检测到的用户指令确定发生的用户交互事件。用户交互事件一般是指用户触发了某指令后,电子设备需要即时的对该指令进行响应,进行某种处理并将处理结果显示在界面上的情况。例如,用户使用电子设备观看视频、编辑短信、使用聊天软件、使用游戏软件、控制电子设备界面的切换、使用浏览浏览网页等,都属于用户交互事件。比如,用户使用聊天软件与某一好友聊天,用户在对话框输入文字,电子设备通过服务器将用户输入的文字发送至该好友的电子设备。在这个过程中,电子设备需要调度多个线程以完成本次用户交互事件,从该用户交互事件的开始到完成的整个过程中,进程创建的用来完成这次用户交互事件的线程都可以认为是与用户体验相关的线程。
在另一实施例中,为目标线程添加第一预设标签之后,该方法还包括:若前台进程为应用进程,则在检测到前台进程切换至后台运行时,删除第一预设线程的第一预设标签。当前台进程切换到后台运行时,该进程的运行情况已经与用户体验无关,其线程的重要程度也有所下降,因此,可以将该进程对应的第一预设线程的ux标记删除,将这些ux线程恢复为普通线程。
此外,对于那些在用户交互事件中临时创建的任务线程来说,在执行完对应的任务后就会被销毁,其自然会丢失掉ux标签。而对于系统级的第二预设线程来说,即使发生了进程的前后台切换,这些线程始终与用户体验相关,所以始终保有ux标签。
通过上述实施例,框架层识别出那些直接影响到用户体验的线程并为其添加标记。而线程的运行,需要内核为之分配系统资源。因此,线程在执行任务前,会向内核请求资源。内核在基于该请求为其分配资源时,可以先判断该线程是否为ux线程,对于ux线程和非ux线程采用不同的资源分配方式。
需要说明的是,这里的第一类线程和第二类线程中的“第一类”和“第二类”,仅仅是为了区分线程是否具有ux标签,而不是说将系统中的线程只划分为这两种类别。本申请的资源分配优化方案是从线程是否具有ux标签这一角度出发的,如果线程同时还具有其他属性,则在资源分配时,考虑了是否具有ux标签这一属性后,仍然会考虑其他属性。
上述实施例介绍了静态ux线程的识别。还有一些线程虽然并没有直接地执行用户交互事件的相关任务,但是这些线程的运行情况也会影响到静态ux线程的运行情况,进而间接地影响到用户交互事件的相关任务的执行。也就是说,这些线程并不是总是与用户体验相关,但是这些线程在执行过程的某段时间内,可能通过资源约束与静态ux线程产生关联,因此,在一些实施例中,为了进一步地减少交互场景下的卡顿现象,内核层将这些与静态ux线程之间有约束关系的线程也标记为ux线程。而一旦这种约束关系结束,就会将该线程恢复至非ux线程。本申请实施例中将这类线程定义为动态ux线程。其中,具体的约束关系包括但不限于进程间通信、线程间通信或者持有临界资源等。比如,静态ux线程通过进程间通信请求的普通线程,静态ux线程通过某种线程间通信方式请求的普通线程,持有静态ux线程需要的等待信号量、读写信号量、互斥锁等临界资源的普通线程等,本申请实施例中将这类线程标记为动态ux线程。
基于此,在一些实施例中,该方法还包括:对第一类线程的运行状态进行检测;当检测到有第一类线程进入阻塞状态,则确定与进入阻塞状态的第一类线程之间有约束关系的关联线程;为关联线程添加第一预设标签,以将关联线程标记为第一类线程。
在一些实施例中,将关联线程标记为第一类线程之后,还包括:当检测到约束关系解除时,删除关联线程的第一预设标签。
其中,关于线程的阻塞状态,在内核层面一般会区分为D状态(Uninterruptablesleep状态,不可中断的睡眠状态)和S状态(interruptable sleep状态,可中断的睡眠状态),比如,线程发起IO请求但得不到满足,就进入D状态;线程发起同步Binder(一种进程间通信机制)请求,就会进入S状态。线程进入这些状态一般都是因为这些都是线程任务执行途中因为某些原因或者逻辑,需要主动或者被动地放弃CPU资源。
该实施例中,内核层对静态ux线程的状态进行检测,当检测到ux线程进入到堵塞状态时,确定出与进入堵塞状态的ux线程之间具有约束关系的关联线程,如果这些关联线程没有及时分配到资源,比如IO资源,而导致运行受阻,则由于关联线程的运行缓慢又会导致该ux线程长时间处于阻塞状态,因此,为了避免该ux线程长时间处于阻塞状态,内核层会将识别出的关联线程也标记为ux线程,以提高其IO处理效率,保证其及时执行,进而快速解除该ux线程的阻塞状态。
上文中介绍了应用框架层和内核层识别并标记ux线程的方式。内核可以通过判断线程携带的标签判断该线程属于哪一类线程,例如,在一实施例中,该方法还包括:当接收到线程发送的IO请求时,获取IO请求携带的标签,并根据标签确定线程的目标类型;将IO请求添加至与目标类型对应的请求队列中。
比如,获取IO请求携带的标签;若标签为第一预设标签,则判定线程为第一类线程;若标签为第二预设标签,则判定线程为第二类线程。在一实施例中,第一预设标签为ux,第二预设标签为oth。
内核对IO通道的使用情况进行检测,先检测是否有空闲的IO通道,当有空闲的IO通道时,对第一类线程对IO通道的使用情况,获取第一类线程对IO通道的第一使用数量,并将第一使用数量与第一阈值进行比较,当第一使用数量小于第一阈值时,执行102,当第一使用数量不小于第一阈值时,执行103。
在102中,对第一队列中的IO请求进行分配,其中,第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程。
在103中,对第二队列中的IO请求进行分配,其中,第二队列中的IO请求为第二类线程发送的IO请求。
如果第一使用数量小于第一阈值,则第一类线程当前使用的IO通道的数量并未超过允许其使用的最多通道数,此时,可以优先分配第一队列中的IO请求,即优先分配第一类线程发送的IO请求。反之,如果此时,第一类线程当前使用的IO通道的数量已经达到了允许其使用的最多通道数。则对第二队列中的IO请求进行分配。
基于这样的分配机制,将线程划分为优先级不同的多类线程,针对不同类型的线程设置不同的队列,以对不同类型的线程发送的IO请求分别管理。调度派发处理时分别按存储器实际正在处理的各IO请求类型个数来动态调整派发。在确保第二类线程不被饿死的情况下,优先处理第一类线程的IO请求。以第一阈值为28为例,当第一队列和第二队列中的IO请求数量都很多时,同一时刻存储器内的通道只能有28个第一类线程的IO,同时有不少于4个第二类线程。
其中,在一些实施例中,对第一队列中的IO请求进行分配之前,还包括:检测第一队列中是否有待分配的IO请求;当第一队列中有待分配的IO请求时,执行对第一队列中的IO请求进行分配;当第一队列中没有待分配的IO请求时,执行对第二队列中的IO请求进行分配。
该实施例中,在对第一队列中的IO请求进行分配之前,先检测第一队列中是否有待分配的IO请求,如果有待分配的IO请求,则按照加入第一队列中的先后顺序将第一队列中的IO请求分配至空闲的IO通道。当第一队列中没有待分配的IO请求时,说明当前的ux线程不多,可以对第二队列中的IO请求进行分配。
具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。
由上可知,本申请实施例提供的IO请求的调度方法,第一类线程为执行用户交互事件中相关任务的线程。当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,如果该第一使用数量小于第一类线程对应的第一阈值,则优先分配第一队列中的IO请求,使得这类线程能够更快地获取到IO资源,反之,当第一使用数量不小于该第一阈值时,说明第一类线程已经占用较多的IO通道,此时可以对第二队列中的IO请求进行分配。通过这种方式,对线程分类别管理,并优先派发执行用户交互事件中相关任务的线程,使得这类线程能够更快地获取到IO资源,从整体上提高IO通道的分配效率,避免用户交互场景出现卡顿。
根据前面实施例所描述的方法,以下将举例作进一步详细说明。
请参阅图2,图2为本发明实施例提供的IO请求的调度方法的第二流程示意图。方法包括:
在201中,当检测到有空闲的IO通道时,获取第一类线程和第二类线程对IO通道的第二使用数量,并判断第二使用数量是否小于第二阈值,其中,将线程划分为优先级不同的三类线程。
在上文的一些实施例中,将线程分为两类:ux线程和非ux线程。在该实施例中,可以将线程分为三类进行处理,根据线程的运行情况对用户体验的影响程度的大小,将系统中的线程划分为优先级由高至低的ux线程、前台线程和后台线程。其中,ux线程的识别与标记方式请参照上述实施例,在此不再赘述。
将ux线程记为第一类线程,当检测到有线程切换至前台运行时,判断切换至前台运行的线程是否为第一类线程;若否,则为线程添加第二预设标签,以将线程标记为第二类线程;当检测到有线程切换至后台运行时,判断切换至后台运行的线程是否为第一类线程;若否,则为线程添加第三预设标签,以将线程标记为第三类线程。
通过这种方式,将除了ux线程之外的其他线程中运行在前台的线程作为第二类线程,记为FG线程,将除了ux线程之外的其他线程中运行在后台的线程作为第三类线程,记为BG线程。
其中,对于用户体验来说,ux线程的重要程度大于FG线程的重要程度,FG线程的重要程度大于BG线程的重要程度。因此,设置ux线程的优先级大于FG线程的优先级,FG线程的优先级大于BG线程的优先级。
对于ux线程,最多通道数为第一阈值Nu1,最少通道数为第五阈值Nu2。对于FG线程,最多通道数为第四阈值Nf1,最少通道数为第六阈值Nf2。对于BG线程,最多通道数为第三阈值Nb1,最少通道数为第七阈值Nb2。其中,上述六个极限值满足如下条件:
存储器的通道总数量N=Nu1+Nf2+Nb2。
存储器的通道总数量N=Nf1+Nu2+Nb2。
存储器的通道总数量N=Nb1+Nu2+Nf2。
比如,Nu1=25,Nf1=25,Nb1=22;Nu2=5,Nf2=5,Nb2=2。
此外,本申请实施例,对于每一类型的线程设置一个队列。例如,将与用户体验相关的线程发送的IO请求都添加至第一队列,将前台线程发送的IO请求都添加至第二队列,将后台线程发送的IO请求都添加至第三队列。请参阅图3,图3为本申请实施例提供的IO请求的调度方法的一种应用场景示意图。
本申请实施例,电子设备的系统架构至少包括应用框架(framework)层和内核(kernel)层,应用框架层会将一些线程标记为ux线程,例如,应用框架层为一些特定的线程添加第一预设标签,以将这些线程标记为ux线程。内核层负责对IO队列中的请求进行调度执行。
例如,在一实施例中,该方法还包括:
确定出执行用户交互事件中相关任务的目标线程;
为所述目标线程添加所述第一预设标签,以将所述目标线程标记为第一类线程。
当检测到有线程切换至前台运行时,判断切换至前台运行的线程是否为第一类线程;
若否,则为所述线程添加第二预设标签,以将所述线程标记为第二类线程;
当检测到有线程切换至后台运行时,判断切换至后台运行的线程是否为第一类线程;
若否,则为所述线程添加第三预设标签,以将所述线程标记为第三类线程。
内核可以通过判断线程携带的标签判断该线程属于哪一类线程,例如,在一实施例中,该方法还包括:当接收到线程发送的IO请求时,获取IO请求携带的标签,并根据标签确定线程的目标类型;将IO请求添加至与目标类型对应的请求队列中。
比如,获取IO请求携带的标签;若标签为第一预设标签,则判定线程为第一类线程;若标签为第二预设标签,则判定线程为第二类线程;若标签为第三预设标签,则判定线程为第三类线程。在一实施例中,第一预设标签为ux,第二预设标签为FG,第三预设标签为BG。
内核对IO通道的使用情况进行检测,先检测是否有空闲的IO通道,当有空闲的IO通道时,获取第一类线程和第二类线程对IO通道的第二使用数量,并判断第二使用数量是否小于第二阈值,其中,第二阈值等于存储器的通道总数量N-Nb2。当第二使用数量小于第二阈值时,判定可以对第一类线程或者第二类线程的IO请求进行派发,此时执行202。当第二使用数量不小于第二阈值时,判定可以对第三类线程的IO请求进行派发,此时执行208。
在202中,确定第一类线程对IO通道的第一使用数量,并判断第一使用数量是否小于第一阈值,其中,第二阈值大于第一阈值。
当第二使用数量小于第二阈值时,判定可以对第一类线程或者第二类线程的IO请求进行派发。由于ux线程的优先级高于FG线程的优先级,先确定第一类线程对IO通道的第一使用数量,并判断第一使用数量是否小于第一阈值,当第一使用数量小于第一阈值时,说明ux线程对IO通道的使用量还未达到允许的最多通道数Nu1,则执行203。当第一使用数量不小于第一阈值时,说明ux线程对IO通道的使用量已达到允许的最多通道数Nu1,则执行205。
在203中,检测第一队列中是否有待分配的IO请求。
当第一队列中有待分配的IO请求时,执行204;当第一队列中没有待分配的IO请求时,执行205。
在204中,对第一队列中的IO请求进行分配,其中,第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程。
在205中,检测第二队列中是否有待分配的IO请求。
当第一使用数量小于第一阈值时,检测第一队列中是否有待分配的IO请求,如果有,则将第一队列中的IO请求分配至空闲的IO通道。若第一使用数量小于第一阈值且第一队列中没有待分配的IO请求,则说明虽然此时ux线程对IO通道的使用量还未达到允许的最多通道数Nu1,但是ux线程数量较少,则可以最大化FG线程的IO资源。
在对FG线程的IO请求进行分配之前,先检测第二队列中是否有待分配的IO请求。
当第二队列中有待分配的IO请求时,执行206。当第二队列中没有待分配的IO请求时,执行208。
在206中,确定第二类线程对IO通道的第四使用数量,并判断第四使用数量是否小于第四阈值,其中,第四阈值不大于第一阈值。
当第四使用数量小于第四阈值时,执行207。
当第四使用数量不小于第四阈值时,执行208。
在207中,对第二队列中的IO请求进行分配。
在208中,检测第三队列中是否有待分配的IO请求。
当第三队列中有待分配的IO请求时,执行209。
当第三队列中没有待分配的IO请求时,执行202。
在209中,确定第三类线程对IO通道的第三使用数量,并判断第三使用数量是否小于第三阈值,其中,第三阈值小于第一阈值。
当第三使用数量小于第三阈值时,执行210。当第三使用数量不小于第三阈值时,继续检测存储器中是否有空闲的IO通道。
在210中,对第三队列中的IO请求进行分配。
若第二队列中有待分配的IO请求,则确定第二类线程对IO通道的第四使用数量,并判断第四使用数量是否小于第四阈值,如果第二类线程对IO通道的第四使用数量小于第四阈值,则说明第二类线程对IO通道的第四使用数量尚未达到允许的最多通道数Nu1,以FG线程的分配优先,将第二队列中的IO请求分配至空闲的IO通道。如果此时第二队列中没有待分配的IO请求,则可以最大化BG线程的IO资源。比如,检测第三队列中是否有待分配的IO请求,如果有,则将第三队列中的IO请求分配至空闲的IO通道。
反之,如果第二类线程对IO通道的第四使用数量已经达到允许的最多通道数Nu1,比如,32个通道中,ux线程占用了5个通道,FG线程使用了25个通道,此时即使第二队列中有待分配的IO请求,也会将剩余的2个通道会留给BG线程使用。比如,检测第三队列中是否有待分配的IO请求,如果有,则将第三队列中的IO请求分配至空闲的IO通道。
此外,在一些实施例中,即使第三队列中有待分配的IO请求,并且有空闲的IO通道,但是当BG线程使用的通道数量已经达到Nb2时,也不再分配BG线程的IO请求,这样做的目的是为了为ux线程和FG线程预留一些通道,虽然当前ux线程和FG线程的数量较少,但是当有新的ux线程和FG线程发送的IO请求时,可以立即为这些线程分配IO通道。
基于上述方案,对于各个类型的线程,在进行IO通道的分配时,会根据各类型的线程的IO请求的数量,在最少通道数与最多通道数之间,根据优先级的高低动态的调整各类型的线程可用通道数。
例如,当ux线程较多时,优先为ux线程分配IO通道,但是保证为其分配的IO通道总数不超过Nu1,能够为FG线程和BG线程提供最少通道数,保证FG线程和BG线程被饿死,比如,Nu1=25,Nf2=5,Nb2=2。
又例如,当ux线程较少时,FG线程较多时,则可以最大化FG线程或者BG线程的IO处理能力,当ux线程较少时,ux线程占用的通道数未超过Nu1,同时第一队列中也没有等待分配的IO请求,为FG线程分配IO通道。比如,ux线程占用5个通道,留给BG线程2个通道,则FG线程最多可以使用25个通道。
又例如,当ux线程和FG线程较少时,BG线程较多时,则可以最大化BG线程的IO处理能力。比如,ux线程占用5个通道,FG线程占用5个通道,则BG线程最多可以使用22个通道。
由上可知,本发明实施例提出的IO请求的调度方法,对线程分类别管理,并优先派发执行用户交互事件中相关任务的线程,使得这类线程能够更快地获取到IO资源,从整体上提高IO通道的分配效率,避免用户交互场景出现卡顿。
在一实施例中还提供一种IO请求的调度装置。请参阅图4,图4为本申请实施例提供的IO请求的调度装置300的结构示意图。其中该IO请求的调度装置300应用于电子设备,该IO请求的调度装置300包括数量获取模块301、第一分配模块302以及第二分配模块303,如下:
数量获取模块301,用于当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
第一分配模块302,用于当所述第一使用数量小于所述第一阈值时,对第一队列中的IO请求进行分配,其中,所述第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程;
第二分配模块303,用于当所述第一使用数量不小于所述第一阈值时,对第二队列中的IO请求进行分配,其中,所述第二队列中的IO请求为第二类线程发送的IO请求。
在一些实施例中,该IO请求的调度装置300还包括队列管理模块,该队列管理模块用于:当所述第一使用数量小于所述第一阈值时,检测第一队列中是否有待分配的IO请求;
第一分配模块302还用于:当所述第一队列中有待分配的IO请求时,对第一队列中的IO请求进行分配
第二分配模块303还用于:当所述第一队列中没有待分配的IO请求时,对第二队列中的IO请求进行分配。
在一些实施例中,数量获取模块301还用于:当检测到有空闲的IO通道时,获取第一类线程和第二类线程对所述IO通道的第二使用数量,并判断所述第二使用数量是否小于第二阈值,其中,所述第二阈值大于所述第一阈值;
以及,当所述第二使用数量小于所述第二阈值时,执行确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
该IO请求的调度装置300还包括第三分配模块,该第三分配模块用于当所述第二使用数量不小于所述第二阈值时,对第三队列中的IO请求进行分配,其中,所述第三队列中的IO请求为第二类线程发送的IO请求。
在一些实施例中,队列管理模块还用于:当所述第二使用数量不小于所述第二阈值时,检测所述第三队列中是否有待分配的IO请求;
第三分配模块还用于:当所述第三队列中有待分配的IO请求时,执行对第三队列中的IO请求进行分配;
数量获取模块301还用于:当所述第三队列中没有待分配的IO请求时,执行确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值。
在一些实施例中,数量获取模块301还用于:当所述第三队列中有待分配的IO请求时,确定第三类线程对IO通道的第三使用数量,并判断所述第三使用数量是否小于第三阈值,其中,所述第三阈值小于所述第一阈值;
第三分配模块还用于:当所述第三使用数量小于所述第三阈值时,执行对第三队列中的IO请求进行分配。
在一些实施例中,数量获取模块301还用于:当所述第一使用数量不小于所述第一阈值或者所述第一队列中没有待分配的IO请求时,确定第二类线程对IO通道的第四使用数量,并判断所述第四使用数量是否小于第四阈值,其中,所述第四阈值不大于所述第一阈值;
第三分配模块还用于:当所述第四使用数量不小于所述第四阈值时,对第三队列中的IO请求进行分配。
在一些实施例中,队列管理模块还用于:当接收到线程发送的IO请求时,获取所述IO请求携带的标签,并根据所述标签确定所述线程的目标类型;将所述IO请求添加至与所述目标类型对应的请求队列中。
在一些实施例中,队列管理模块还用于:获取所述IO请求携带的标签;
若所述标签为第一预设标签,则判定所述线程为第一类线程;
若所述标签为第二预设标签,则判定所述线程为第二类线程;
若所述标签为第三预设标签,则判定所述线程为第三类线程。
在一些实施例中,该IO请求的调度装置300还包括线程标记模块,用于确定出执行用户交互事件中相关任务的目标线程;为所述目标线程添加所述第一预设标签,以将所述目标线程标记为第一类线程。
在一些实施例中,线程标记模块还用于:当检测到有线程切换至前台运行时,判断切换至前台运行的线程是否为第一类线程;若否,则为所述线程添加第二预设标签,以将所述线程标记为第二类线程;当检测到有线程切换至后台运行时,判断切换至后台运行的线程是否为第一类线程;若否,则为所述线程添加第三预设标签,以将所述线程标记为第三类线程。
应当说明的是,本申请实施例提供的IO请求的调度装置与上文实施例中的IO请求的调度方法属于同一构思,通过该IO请求的调度装置可以实现IO请求的调度方法实施例中提供的任一方法,其具体实现过程详见IO请求的调度方法实施例,此处不再赘述。
由上可知,本申请实施例提出的IO请求的调度装置,第一类线程为执行用户交互事件中相关任务的线程。当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,如果该第一使用数量小于第一类线程对应的第一阈值,则优先分配第一队列中的IO请求,使得这类线程能够更快地获取到IO资源,反之,当第一使用数量不小于该第一阈值时,说明第一类线程已经占用较多的IO通道,此时可以对第二队列中的IO请求进行分配。通过这种方式,对线程分类别管理,并优先派发执行用户交互事件中相关任务的线程,使得这类线程能够更快地获取到IO资源,从整体上提高IO通道的分配效率,避免用户交互场景出现卡顿。
本申请实施例还提供一种电子设备。所述电子设备可以是智能手机、平板电脑等设备。请参阅图5,图5为本申请实施例提供的电子设备的第一种结构示意图。电子设备400包括处理器401和存储器402。其中,处理器401与存储器402电性连接。
处理器401是电子设备400的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或调用存储在存储器402内的计算机程序,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
存储器402可用于存储计算机程序和数据。存储器402存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器401通过调用存储在存储器402的计算机程序,从而执行各种功能应用以及数据处理。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
当所述第一使用数量小于所述第一阈值时,对第一队列中的IO请求进行分配,其中,所述第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程;
当所述第一使用数量不小于所述第一阈值时,对第二队列中的IO请求进行分配,其中,所述第二队列中的IO请求为第二类线程发送的IO请求。
在一些实施例中,请参阅图6,图6为本申请实施例提供的电子设备的第二种结构示意图。电子设备400还包括:射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409。其中,处理器401分别与射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409电性连接。
射频电路403用于收发射频信号,以通过无线通信与网络设备或其他电子设备进行通信。
显示屏404可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图像、文本、图标、视频和其任意组合来构成。
控制电路405与显示屏404电性连接,用于控制显示屏404显示信息。
输入单元406可用于接收输入的数字、字符信息或用户特征信息(例如指纹),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。其中,输入单元406可以包括指纹识别模组。
音频电路407可通过扬声器、传声器提供用户与电子设备之间的音频接口。其中,音频电路407包括麦克风。所述麦克风与所述处理器401电性连接。所述麦克风用于接收用户输入的语音信息。
传感器408用于采集外部环境信息。传感器408可以包括环境亮度传感器、加速度传感器、陀螺仪等传感器中的一种或多种。
电源409用于给电子设备400的各个部件供电。在一些实施例中,电源409可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
虽然图中未示出,电子设备400还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
当所述第一使用数量小于所述第一阈值时,对第一队列中的IO请求进行分配,其中,所述第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程;
当所述第一使用数量不小于所述第一阈值时,对第二队列中的IO请求进行分配,其中,所述第二队列中的IO请求为第二类线程发送的IO请求。
由上可知,本申请实施例提供了一种电子设备,所述电子设备第一类线程为执行用户交互事件中相关任务的线程。当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,如果该第一使用数量小于第一类线程对应的第一阈值,则优先分配第一队列中的IO请求,使得这类线程能够更快地获取到IO资源,反之,当第一使用数量不小于该第一阈值时,说明第一类线程已经占用较多的IO通道,此时可以对第二队列中的IO请求进行分配。通过这种方式,对线程分类别管理,并优先派发执行用户交互事件中相关任务的线程,使得这类线程能够更快地获取到IO资源,从整体上提高IO通道的分配效率,避免用户交互场景出现卡顿。
本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,所述计算机执行上述任一实施例所述的IO请求的调度方法。
需要说明的是,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可以存储于计算机可读存储介质中,所述存储介质可以包括但不限于:只读存储器(ROM,Read OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
此外,本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
以上对本申请实施例所提供的IO请求的调度方法、装置、存储介质及电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (13)

1.一种IO请求的调度方法,其特征在于,包括:
当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
当所述第一使用数量小于所述第一阈值时,对第一队列中的IO请求进行分配,其中,所述第一队列中的IO请求为第一类线程发送的IO请求,所述第一类线程为执行用户交互事件中相关任务的线程;
当所述第一使用数量不小于所述第一阈值时,对第二队列中的IO请求进行分配,其中,所述第二队列中的IO请求为第二类线程发送的IO请求。
2.如权利要1所述的IO请求的调度方法,其特征在于,所述对第一队列中的IO请求进行分配之前,还包括:
当所述第一使用数量小于所述第一阈值时,检测第一队列中是否有待分配的IO请求;
当所述第一队列中有待分配的IO请求时,执行对第一队列中的IO请求进行分配;
当所述第一队列中没有待分配的IO请求时,执行对第二队列中的IO请求进行分配。
3.如权利要求1所述的IO请求的调度方法,其特征在于,所述确定第一类线程对IO通道的第一使用数量之前,还包括:
当检测到有空闲的IO通道时,获取第一类线程和第二类线程对所述IO通道的第二使用数量,并判断所述第二使用数量是否小于第二阈值,其中,所述第二阈值大于所述第一阈值;
当所述第二使用数量小于所述第二阈值时,执行确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
当所述第二使用数量不小于所述第二阈值时,对第三队列中的IO请求进行分配,其中,所述第三队列中的IO请求为第二类线程发送的IO请求。
4.如权利要求3所述的IO请求的调度方法,其特征在于,所述对第三队列中的IO请求进行分配之前,还包括:
当所述第二使用数量不小于所述第二阈值时,检测所述第三队列中是否有待分配的IO请求;
当所述第三队列中有待分配的IO请求时,执行对第三队列中的IO请求进行分配;
当所述第三队列中没有待分配的IO请求时,执行确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值。
5.如权利要求4所述的IO请求的调度方法,其特征在于,所述对第三队列中的IO请求进行分配之前,包括:
当所述第三队列中有待分配的IO请求时,确定第三类线程对IO通道的第三使用数量,并判断所述第三使用数量是否小于第三阈值,其中,所述第三阈值小于所述第一阈值;
当所述第三使用数量小于所述第三阈值时,执行对第三队列中的IO请求进行分配。
6.如权利要求2所述的IO请求的调度方法,其特征在于,所述对第二队列中的IO请求进行分配之前,还包括:
当所述第一使用数量不小于所述第一阈值或者所述第一队列中没有待分配的IO请求时,确定第二类线程对IO通道的第四使用数量,并判断所述第四使用数量是否小于第四阈值,其中,所述第四阈值不大于所述第一阈值;
当所述第四使用数量小于所述第四阈值时,执行所述对第二队列中的IO请求进行分配;
当所述第四使用数量不小于所述第四阈值时,对第三队列中的IO请求进行分配。
7.如权利要求2所述的IO请求的调度方法,其特征在于,还包括:
当接收到线程发送的IO请求时,获取所述IO请求携带的标签,并根据所述标签确定所述线程的目标类型;
将所述IO请求添加至与所述目标类型对应的请求队列中。
8.如权利要求7所述的IO请求的调度方法,其特征在于,所述获取所述IO请求携带的标签,并根据所述标签确定所述线程的目标类型,包括:
获取所述IO请求携带的标签;
若所述标签为第一预设标签,则判定所述线程为第一类线程;
若所述标签为第二预设标签,则判定所述线程为第二类线程;
若所述标签为第三预设标签,则判定所述线程为第三类线程。
9.如权利要求8所述的IO请求的调度方法,其特征在于,所述方法还包括:
确定出执行用户交互事件中相关任务的目标线程;
为所述目标线程添加所述第一预设标签,以将所述目标线程标记为第一类线程。
10.如权利要求9所述的IO请求的调度方法,其特征在于,所述方法还包括:
当检测到有线程切换至前台运行时,判断切换至前台运行的线程是否为第一类线程;
若否,则为所述线程添加第二预设标签,以将所述线程标记为第二类线程;
当检测到有线程切换至后台运行时,判断切换至后台运行的线程是否为第一类线程;
若否,则为所述线程添加第三预设标签,以将所述线程标记为第三类线程。
11.一种IO请求的调度装置,其特征在于,包括:
数量获取模块,用于当检测到有空闲的IO通道时,确定第一类线程对IO通道的第一使用数量,并判断所述第一使用数量是否小于第一阈值;
第一分配模块,用于当所述第一使用数量小于所述第一阈值时,对第一队列中的IO请求进行分配,其中,所述第一队列中的IO请求为第一类线程发送的IO请求,第一类线程为执行用户交互事件中相关任务的线程;
第二分配模块,用于当所述第一使用数量不小于所述第一阈值时,对第二队列中的IO请求进行分配,其中,所述第二队列中的IO请求为第二类线程发送的IO请求。
12.一种存储介质,其上存储有计算机程序,其特征在于,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至10任一项所述的IO请求的调度方法。
13.一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,其特征在于,所述处理器通过调用所述计算机程序,用于执行如权利要求1至10任一项所述的IO请求的调度方法。
CN202010627342.1A 2020-07-01 2020-07-01 Io请求的调度方法、装置、存储介质及电子设备 Pending CN111831436A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010627342.1A CN111831436A (zh) 2020-07-01 2020-07-01 Io请求的调度方法、装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010627342.1A CN111831436A (zh) 2020-07-01 2020-07-01 Io请求的调度方法、装置、存储介质及电子设备

Publications (1)

Publication Number Publication Date
CN111831436A true CN111831436A (zh) 2020-10-27

Family

ID=72900031

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010627342.1A Pending CN111831436A (zh) 2020-07-01 2020-07-01 Io请求的调度方法、装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN111831436A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112445619A (zh) * 2020-11-30 2021-03-05 海光信息技术股份有限公司 在多线程系统中动态共享有序资源的管理系统和方法
CN112799606A (zh) * 2021-04-08 2021-05-14 蚂蚁金服(杭州)网络技术有限公司 Io请求的调度方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120259982A1 (en) * 2011-04-11 2012-10-11 International Business Machines Corporation Dynamic resource allocation method, system, and program
CN103516536A (zh) * 2012-06-26 2014-01-15 重庆新媒农信科技有限公司 基于线程数量限制的服务器业务请求并行处理方法及系统
CN104657221A (zh) * 2015-03-12 2015-05-27 广东石油化工学院 一种云计算中基于任务分类的多队列错峰调度模型及方法
CN108121608A (zh) * 2016-11-29 2018-06-05 杭州华为数字技术有限公司 一种队列调度方法以及节点设备
CN109783028A (zh) * 2019-01-16 2019-05-21 Oppo广东移动通信有限公司 I/o调度的优化方法、装置、存储介质及智能终端
CN110781145A (zh) * 2019-10-25 2020-02-11 浪潮电子信息产业股份有限公司 一种文件系统任务调度方法、装置、设备及可读存储介质
CN111158910A (zh) * 2019-12-27 2020-05-15 Oppo广东移动通信有限公司 内存管理方法、装置、存储介质及电子设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120259982A1 (en) * 2011-04-11 2012-10-11 International Business Machines Corporation Dynamic resource allocation method, system, and program
CN103516536A (zh) * 2012-06-26 2014-01-15 重庆新媒农信科技有限公司 基于线程数量限制的服务器业务请求并行处理方法及系统
CN104657221A (zh) * 2015-03-12 2015-05-27 广东石油化工学院 一种云计算中基于任务分类的多队列错峰调度模型及方法
CN108121608A (zh) * 2016-11-29 2018-06-05 杭州华为数字技术有限公司 一种队列调度方法以及节点设备
CN109783028A (zh) * 2019-01-16 2019-05-21 Oppo广东移动通信有限公司 I/o调度的优化方法、装置、存储介质及智能终端
CN110781145A (zh) * 2019-10-25 2020-02-11 浪潮电子信息产业股份有限公司 一种文件系统任务调度方法、装置、设备及可读存储介质
CN111158910A (zh) * 2019-12-27 2020-05-15 Oppo广东移动通信有限公司 内存管理方法、装置、存储介质及电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112445619A (zh) * 2020-11-30 2021-03-05 海光信息技术股份有限公司 在多线程系统中动态共享有序资源的管理系统和方法
CN112799606A (zh) * 2021-04-08 2021-05-14 蚂蚁金服(杭州)网络技术有限公司 Io请求的调度方法及装置

Similar Documents

Publication Publication Date Title
CN111831441A (zh) 内存回收方法、装置、存储介质及电子设备
CN111831440A (zh) 内存回收方法、装置、存储介质及电子设备
CN110489213B (zh) 一种任务处理方法及处理装置、计算机系统
EP2893444B1 (en) Quota-based resource management
EP3008594B1 (en) Assigning and scheduling threads for multiple prioritized queues
US8650570B2 (en) Method of assigning instructions in a process to a plurality of scheduler instances based on the instruction, in which each scheduler instance is allocated a set of negoitaited processor resources
CN111831433A (zh) 资源分配方法、装置、存储介质及电子设备
CN111831434A (zh) 资源分配方法、装置、存储介质及电子设备
US20120210326A1 (en) Constrained Execution of Background Application Code on Mobile Devices
US20130346985A1 (en) Managing use of a field programmable gate array by multiple processes in an operating system
CN111831414A (zh) 线程迁移方法、装置、存储介质及电子设备
CN103984598A (zh) 用于线程调度的方法以及系统
CN111813521A (zh) 线程调度方法、装置、存储介质及电子设备
CN111831410A (zh) 任务处理方法、装置、存储介质及电子设备
CN111831438A (zh) 资源分配方法、装置、存储介质及电子设备
CN111831435A (zh) 内存分配方法、装置、存储介质及电子设备
CN113495780A (zh) 任务调度方法、装置、存储介质及电子设备
CN111813520A (zh) 线程调度方法、装置、存储介质及电子设备
US20120144406A1 (en) Wait on address synchronization interface
CN111831432B (zh) Io请求的调度方法、装置、存储介质及电子设备
CN111475299B (zh) 内存分配方法、装置、存储介质及电子设备
CN111831436A (zh) Io请求的调度方法、装置、存储介质及电子设备
US20040098722A1 (en) System, method, and computer program product for operating-system task management
CN111831411A (zh) 任务处理方法、装置、存储介质及电子设备
CN111831439A (zh) Io请求的处理方法、装置、存储介质及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination