CN113495780A - 任务调度方法、装置、存储介质及电子设备 - Google Patents
任务调度方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN113495780A CN113495780A CN202010266780.XA CN202010266780A CN113495780A CN 113495780 A CN113495780 A CN 113495780A CN 202010266780 A CN202010266780 A CN 202010266780A CN 113495780 A CN113495780 A CN 113495780A
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- task queue
- preset type
- threads
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
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
本申请实施例公开了一种任务调度方法、装置、存储介质及电子设备,其中,本申请实施例获取待执行的任务队列,并判断任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;当任务队列中存在预设类型的线程时,将任务队列中的预设类型的线程作为目标线程;从任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;当任务队列中不存在具有预设标签的线程时,执行任务队列中运行时间最短的线程对应的任务。该方案选择预设类型的线程优先执行,有效减少这些线程的等待时间,避免后台任务线程过多而导致与用户体验相关线程不能及时得到调度的情况,从而减少卡顿的产生。
Description
技术领域
本申请涉及电子设备技术领域,具体涉及一种任务调度方法、装置、存储介质及电子设备。
背景技术
主要应用于如智能手机、平板电脑等电子设备的安卓系统,其底层由linux内核实现。因此,在手机设备上运行的各个应用线程,同样遵循linux内核的调度规则。例如,采用CFS(complete fair schedule,完全公平调度)规则对线程进行调度。
这种调度机制采用的原则是,在内核中运行时,完全公平地获取与该线程静态优先级相匹配的CPU(central processing unit,中央处理器)资源,静态优先级越高,可占用的CPU资源越多。
但是,无论任何类型的线程都基于该原则进行调度,当后台等待执行的较多时,即使优先级较高的线程也不得不面临较长时间的等待,导致系统产生卡顿。
发明内容
本申请实施例提供一种任务调度方法、装置、存储介质及电子设备,能够减少系统卡顿的产生。
第一方面,本申请实施例提供一种任务调度方法,包括:
获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;
当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程;
从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;
当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
第二方面,本申请实施例还提供一种任务调度装置,包括:
线程监测模块,用于获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;
目标确定模块,用于当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程;
任务执行模块,用于从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;
所述任务执行模块,还用于当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
第三方面,本申请实施例还提供一种存储介质,其上存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如本申请任一实施例提供的任务调度方法。
第四方面,本申请实施例还提供一种电子设备,包括处理器和存储器,所述存储器有计算机程序,所述处理器通过调用所述计算机程序,用于执行如本申请任一实施例提供的任务调度方法。
本申请实施例提供的技术方案,在从任务队列中选择线程执行时,先判断该任务队列中是否存在预设类型的线程,如果该任务队列中存在预设类型的线程,则将任务队列中的预设类型的线程作为目标线程,从任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务,如果任务队列中没有预设类型的线程,则执行任务队列中运行时间最短的线程对应的任务,通过这种方式将与直接或间接执行界面绘制任务的线程标记为预设类型的线程,而这些直接或间接执行界面绘制任务的线程会影响到用户体验,内核在执行任务时,会检测任务队列中是否存在这些影响用户体验的线程,如果有,则优先选择这些预设类型的线程,快速占用CPU资源,可以有效减少预设类型的线程的等待时间,避免后台任务线程过多,导致与用户体验相关线程不能及时得到调度的情况,从而改善交互场景下的用户体验,减少系统卡顿的产生。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的任务调度方法的第一种流程示意图。
图2为本申请实施例提供的任务调度方法的第二种流程示意图。
图3为本申请实施例提供的任务调度方法中的红黑树结构示意图。
图4为本申请实施例提供的任务调度装置的结构示意图。
图5为本申请实施例提供的电子设备的第一种结构示意图。
图6为本申请实施例提供的电子设备的第二种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种任务调度方法,该任务调度方法的执行主体可以是本申请实施例提供的任务调度装置,或者集成了该任务调度装置的电子设备,其中该任务调度装置可以采用硬件或者软件的方式实现。其中,电子设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
请参阅图1,图1为本申请实施例提供的任务调度方法的第一种流程示意图。本申请实施例提供的任务调度方法的具体流程可以如下:
在101中,获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程。
本申请实施例中,电子设备的操作系统可以是基于linux内核的系统,例如,安卓操作系统等。电子设备中,程序运行时,系统会为其创建一个进程,并为该进程分配资源。
线程是进程的一条执行路径,是程序执行时的最小单位,也是CPU调度和分派的基本单位。一个进程可以有多个线程,但至少有一个线程。
本申请实施例中,进程有任务需要执行时,会创建一个新的线程来执行该任务,通过调度器选择就绪状态的线程来执行。不同的调度器根据不同的方法挑选出最适合运行的线程。例如,CFS(complete fair schedule,完全公平调度)调度器等。
如果电子设备的处理器是多核心处理器,则每一个处理器核心可以当作一个独立的处理单元。比如,如果电子设备为八核处理器,则每一个核心为一个独立的处理单元。每个处理单元有各自对应的任务队列,该任务队列中包含分配给该处理单元的任务,每一个任务由对应的线程去执行。
电子设备中可能有一个或者多个程序在同时运行,每个程序至少有一个对应的进程,而一个进程又有至少一个线程在执行任务。因此,电子设备会有多个线程需要执行,需要为这些线程的执行分配CPU资源。内核会按照一定的选核机制为线程分配处理单元。线程被分配了处理单元后,如果线程进入就绪状态,需要执行时,就会被添加至分配的处理单元的任务队列中,等待线程调度器的调度。
其中,线程的生命周期可以分为5种状态:新建状态(New):使用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序start()这个线程。就绪状态(Runnable):当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程会被添加至就绪队列中,要等待线程调度器的调度。运行状态(Running):如果就绪状态的线程获取CPU资源,就可以执行run()方法,此时线程便处于运行状态,处于运行状态的线程可以变为阻塞状态、就绪状态和死亡状态。阻塞状态(Blocked):如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得资源后可以重新进入就绪状态。死亡状态(Dead):一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。
CFS调度器按照线程的优先级为线程分配CPU使用时间,例如,有两个优先级相同的线程在一个CPU上运行,那么每一个线程都会分配到50%的CPU运行时间,即实现公平调度。而当线程的优先级不同时,就会按照线程的权重的比例分配CPU运行时间。其中,权重代表着线程的优先级,权重越大,则优先级越高,分配的CPU运行时间的比例也越大。一般情况下,通过nice值来表示线程的权重,nice值就是一个具体的数字,取值范围是[-20,19]。数值越小代表优先级越大,同时也意味着权重值越大。
CFS调度器为任务队列(就绪队列)中的每一个线程安排一个虚拟时钟,并记录一个调度实体(即线程)已经运行的虚拟时间总和,记为vruntime。如果一个线程得以执行,该线程的vruntime会增大,没有得到执行的线程的vruntime保持不变。CFS调度器从任务队列中选择线程来执行时,总是选择跑得最慢,即vruntime最小的线程来执行,以实现所谓的“完全公平”。其中,优先级越高的线程,其vruntime增长得越慢,以使其得到更多的运行机会。
相关的CFS调度器基于上述原则对任务队列中的线程进行调度。当任务队列中有大量的就绪状态线程等待被调度时,此时,即使是优先级高的线程也不得不面临较长的等待时间。
而对于一些会直接影响到用户体验的线程来说,比如直接或间接执行界面绘制任务的线程,如果等待时间过长,会产生系统卡顿,为用户带来不好的体验。因此,本申请实施例中,在基于CFS调度器管理线程的调度时,会将一些线程标记为预设类型的线程。例如,在一些实施例中,将预设类型的线程为ux(userexperience,用户体验)线程。不仅为ux线程赋予较高的权重,同时对于任务队列中的ux线程,会优先调度。以缩短ux线程的等待时间,使他们能够快速得分配到CPU运行时间,以尽快完成与界面绘制相关的任务,从而改善交互场景下的用户体验,减少系统卡顿的产生。
本申请实施例中,电子设备的系统架构至少包括应用框架(framework)层和内核(kernel)层,应用框架层会将一些线程标记为ux线程,内核层负责对任务队列中的线程进行调度执行。
其中,本申请实施例中,一些直接执行界面绘制任务的线程为静态ux线程,包括但不限于以下几种线程:前台的UI(userinterface,用户界面)线程,前台的Render(渲染)线程,GL线程,用户输入事件的分发线程,用户输入事件的检测线程,系统动画线程等,这些直接参与到界面绘制任务的线程统称为静态ux线程。而一些间接地参与到界面绘制任务的线程为动态ux线程,即这些线程并不是总是与用户体验相关,但是这些线程在执行过程的某段时间内,可能通过资源约束与静态ux线程产生关联,这时候可以将这些与静态ux线程之间有资源约束关系的线程提升为ux线程。而一旦这种资源约束关系结束,就会将该线程恢复至非ux线程。具体的资源约束关系包括但不限于如下几种:持有静态Ux线程需要的资源的普通线程,静态Ux线程通过进程间通信请求的普通线程也可以提升为ux线程,等等。
如果上层的应用框架层判定创建的某一线程为属于ux线程,则直接将该线程标记为ux线程。底层的内核层将该ux线程分配给某一处理单元后,该处理单元在调度线程时,可以优先调度ux线程。
多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。具有多核处理器的电子设备来说,每一个内核有对应的任务队列,在一个线程执行完成后,需要从任务队列中选择下一个要执行的任务,CFS调度器一般选择运行时间最短的线程执行。但是,本实施例中,在从任务队列中选择线程时,先判断任务队列中是否存在ux线程。例如,通过判断所述任务队列中是否存在具有预设标签的线程,比如,携带有ux标签的线程为ux线程。
在102中,当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程。
如果内核检测到任务队列中存在ux线程,则将这些ux线程作为需要优先执行的目标线程。任务队列中存在ux线程时,存在的ux线程可能是一个或者多个,如果有多个ux线程,则这些ux线程都可以作为目标线程。
在103中,从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务。
这里的运行时间是指CFS调度器按照一定的转换规则对实际运行时间进行转换得到的虚拟运行时间,即vruntime。
如果目标线程有多个,则对这多个ux线程来说,仍然按照CFS调度器的基本原则,选择运行时间最短的ux线程执行。当有多个ux线程时,这些ux线程的权重不同,vruntime不同,因此,在这多个ux线程内部也要优先选择vruntime最小的来运行。
在104中,当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
如果任务队列中不存在ux线程,则仍然按照CFS调度器的基本原则,选择运行时间最短的线程,运行该线程,以执行该线程对应的任务。
具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。
由上可知,本申请实施例提供的任务调度方法,在从任务队列中选择线程执行时,先判断该任务队列中是否存在预设类型的线程,如果该任务队列中存在预设类型的线程,则将任务队列中的预设类型的线程作为目标线程,从任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务,如果任务队列中没有预设类型的线程,则执行任务队列中运行时间最短的线程对应的任务,通过这种方式将与直接或间接执行界面绘制任务的线程标记为预设类型的线程,而这些直接或间接执行界面绘制任务的线程会影响到用户体验,内核在执行任务时,会检测任务队列中是否存在这些影响用户体验的线程,如果有,则优先选择这些预设类型的线程,快速占用CPU资源,可以有效减少预设类型的线程的等待时间,避免后台任务线程过多,导致与用户体验相关线程不能及时得到调度的情况,从而改善交互场景下的用户体验,减少卡顿的产生。
在一些实施例中,所述执行所述任务队列中运行时间最短的线程对应的任务之后,还包括:当所述任务执行完成后,返回执行所述获取目标处理单元对应的任务队列,并判断所述任务队列中是否存在预设类型的线程。
对于系统内核来说,只要任务队列中有待执行的任务,处理器就要去执行这些任务,因此,当任务队列中运行时间最短的非ux线程或者ux线程对应的任务执行完成后,需要继续从任务队列中选择新的任务去执行,这时就要返回101,并重新执行101至104。
在一些实施例中,该方法还包括:当检测到所述任务队列中有预设类型的线程进入堵塞状态时,检测所述任务队列中是否存在与进入堵塞状态的预设类型的线程之间具有资源约束关系的关联线程;当所述任务队列中存在所述关联线程时,将所述关联线程标记为预设类型的线程。
该实施例提出一种动态地将非ux线程提升为ux线程的方案,内核对任务队列中的ux线程的状态进行实时监测,检测是否有ux线程进入堵塞状态。当ux线程因为资源受限,或者该ux线程与其他普通线程之间的binder通信受阻等原因,导致运行状态的ux线程进入堵塞状态,此时,可以检测任务队列中是否有与该堵塞状态的ux线程之间具有资源约束关系的关联线程,如果有,则将这些关联线程提升为ux线程。
该实施例中通过这种动态标记ux线程的方式,将和用户体验相关的线程和其他的普通线程区分开来,进一步地提升ux线程的执行速度,提高用户体验。
在一些实施例中,该方法还包括:当有新线程创建时,判断所述新线程是否用于执行界面绘制任务;若所述新线程用于执行界面绘制任务,将所述新线程标记为预设类型的线程;当根据资源分配规则将所述线程分配至目标处理单元时,将所述新线程添加至所述目标处理单元的任务队列。
该实施例中,在线程创建时,就会对线程是否为ux线程进行识别,通过判断创建的线程是否用于执行界面绘制任务,判断该线程是否与用户体验直接相关,如果是,则把这些线程标记为ux线程。系统根据资源分配规则(例如选核机制)将该线程分配至某一目标处理单元后,会将该ux线程添加至该目标处理单元的任务队列中,等待被调度。
其中,若所述新线程用于执行界面绘制任务,为所述线程添加预设标签,以将所述线程标记为预设类型的线程。若所述新线程不用于执行界面绘制任务,则在根据资源分配规则将所述线程分配至目标处理单元时,将所述线程添加至所述目标处理单元的任务队列。例如,预设标签为ux标签。
其中,Linux使用task_struct结构体描述和记录线程,每个线程都有唯一属于自己的task_struct结构体。task_struct中记录了线程的标识符、状态、优先级、内存指针、上下文数据等等信息,每一个task_struct中都有一个sched_entity结构,进程的vruntime和权重都保存在这个结构中。内核可以根据task_struct数据判断新线程是否用于执行界面绘制任务。
在一些实施例中,每个任务队列都维护了一棵平衡二叉树,该平衡二叉树挂载了任务队列中待执行的线程,任务队列中的线程与节点一一对应,节点的值为对应线程的vruntime。其中,在一些实施例中,平衡二叉树可以是红黑树。
当新创建的线程进入到就绪状态后,需要加入到任务队列中,vruntime的初始值一般为0。如果该线程被执行后,计算线程运行的实际运行时间,将其转换为虚拟运行时间,根据该虚拟运行时间更新vruntime,则根据更新后的vruntime调整该线程在红黑树上的位置。
通过这种红黑树的维护方式,在不考虑ux线程的情况下,CFS调度器选择红黑树最左边的线程运行。随着系统时间的推移,原来左边运行过的线程慢慢的会移动到红黑树的右边,原来右边的线程也会最终移动到最左边。因此红黑树中的每个线程都有机会运行。而在任务队列中有ux线程的情况下,CFS调度器优先选择红黑树上最左边的ux线程运行,在ux线程运行完成后,再运行其他的非ux线程。可以有效减少ux线程的等待时间,避免后台任务线程过多而导致与用户体验相关的ux线程不能及时得到调度的情况,从而改善交互场景下的用户体验,减少系统卡顿的产生。
根据前面实施例所描述的方法,以下将举例作进一步详细说明。
请参阅图2,图2为本发明实施例提供的任务调度方法的第二流程示意图。
所述方法包括:
在201中,当有新线程创建时,判断所述新线程是否用于执行界面绘制任务。
在202中,若所述新线程用于执行界面绘制任务,为所述新线程添加ux标签,以将所述新线程标记为ux线程。
在203中,当根据资源分配规则将所述线程分配至目标处理单元时,将所述新线程添加至所述目标处理单元的任务队列。
该实施例中,在线程创建时,会对线程是否为ux线程进行识别,应用框架层通过判断创建的线程是否用于执行界面绘制任务,判断该线程是否与用户体验直接相关,如果是,则把这些线程标记为ux线程。系统根据资源分配规则(例如选核机制)将该线程分配至某一目标处理单元后,内核层会将该ux线程添加至该目标处理单元的任务队列中,等待被调度。
其中,若所述新线程用于执行界面绘制任务,为所述线程添加ux标签,以将所述线程标记为ux线程。若所述新线程不用于执行界面绘制任务,则在根据资源分配规则将所述线程分配至目标处理单元时,直接将线程添加至目标处理单元的任务队列。
在204中,获取目标处理单元的任务队列,判断所述任务队列中是否存在ux线程。
对于内核来说,只要任务队列中有任务,就要去执行这些任务。在上一个任务执行完成之后,需要继续从任务队列中选择新的任务去执行,此时获取任务队列,判断任务队列中是否有ux线程,携带有ux标签的即为ux线程。
ux线程包括静态ux线程和动态ux线程,ux线程为一些特定种类的线程,动态ux线程一般根据将本来不是ux线程的其他线程标记为ux线程得到。具体请参照上述实施例,在此不再赘述。
当所述任务队列中存在ux线程时,执行205;当任务队列中不存在ux线程时,执行206。
在205中,从所述任务队列中确定出运行时间最短的ux线程,并执行运行时间最短的ux线程对应的任务。
在206中,执行所述任务队列中运行时间最短的线程对应的任务。
如果内核检测到任务队列中存在ux线程,则将这些ux线程作为需要优先执行的目标线程。任务队列中存在ux线程时,存在的ux线程可能是一个或者多个,如果有多个ux线程,则这些ux线程都可以作为目标线程。
如果个ux线程有多个,则对这多个ux线程来说,仍然按照CFS调度器的基本原则,选择运行时间最短的ux线程执行。当有多个ux线程时,这些ux线程的权重不同,vruntime不同,因此,在这多个ux线程内部也要优先选择vruntime最小的来运行。
请参阅图3,图3为本发明实施例提供的任务调度方法中的红黑树结构示意图。
每一个任务队列都有维护有对应的一棵红黑树。该红黑树挂载了任务队列中待执行的线程,任务队列中的线程与节点一一对应,节点的值为对应线程的vruntime。当新创建的线程进入到就绪状态后,需要加入到任务队列中,vruntime的初始值一般为0。如果该线程被执行后,计算线程运行的实际运行时间,将其转换为虚拟运行时间,根据该虚拟运行时间更新vruntime,则根据更新后的vruntime调整该线程在红黑树上的位置。
在选择vruntime最小的ux线程时,可以直接选择红黑树上最左侧的ux线程来执行。在任务队列中有ux线程的情况下,CFS调度器优先选择红黑树上最左边的ux线程运行,当ux线程有多个时,按照ux线程的vruntime由小到大的顺序,依次运行这多个ux线程。
在ux线程运行完成后,再运行其他的非ux线程。可以有效减少ux线程的等待时间,避免后台任务线程过多而导致与用户体验相关的ux线程不能及时得到调度的情况,从而改善交互场景下的用户体验,减少系统卡顿的产生。
在所述任务执行完成后,返回执行201。对于内核来说,只要任务队列中有任务,处理器就要去执行这些任务,因此,当任务队列中运行时间最短的非ux线程或者ux线程对应的任务执行完成后,需要继续从任务队列中选择新的任务去执行,这时就要返回204,并重新执行204至206。与此同时,在有新的线程创建时,也会开始执行201。
由上可知,本发明实施例提出的任务调度方法,将与直接或间接执行界面绘制任务的线程标记为ux线程,这些ux线程的运行情况会直接地影响到用户体验,内核在执行任务时,会检测任务队列中是否存在ux线程,如果有,则优先选择这些ux线程,快速占用CPU资源,可以有效减少ux线程的等待时间,避免后台任务线程过多,导致与用户体验相关线程不能及时得到调度的情况,从而改善交互场景下的用户体验,减少系统卡顿的产生。
在一实施例中还提供一种任务调度装置。请参阅图4,图4为本申请实施例提供的任务调度装置300的结构示意图。其中该任务调度装置300应用于电子设备,该任务调度装置300包括线程监测模块301、目标确定模块302以及任务执行模块303,如下:
线程监测模块301,用于获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;
目标确定模块302,用于当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程;
任务执行模块303,用于从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;
任务执行模块303,还用于当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
在一些实施例中,线程监测模块301还用于:
在一些实施例中,该任务调度装置300还包括第一标记模块,该第一标记模块用于:当检测到所述任务队列中有预设类型的线程进入堵塞状态时,检测所述任务队列中是否存在与进入堵塞状态的预设类型的线程之间具有资源约束关系的关联线程;当所述任务队列中存在所述关联线程时,将所述关联线程标记为预设类型的线程。
在一些实施例中,该任务调度装置300还包括第二标记模块,该第二标记模块用于:当有新线程创建时,判断所述新线程是否用于执行界面绘制任务;若所述新线程用于执行界面绘制任务,将所述新线程标记为预设类型的线程;当根据资源分配规则将所述线程分配至目标处理单元时,将所述新线程添加至所述目标处理单元的任务队列。
在一些实施例中,第二标记模块还用于:若所述新线程用于执行界面绘制任务,为所述线程添加预设标签,以将所述线程标记为预设类型的线程。
在一些实施例中,第二标记模块还用于:若所述新线程不用于执行界面绘制任务,则在根据资源分配规则将所述线程分配至目标处理单元时,将所述线程添加至所述目标处理单元的任务队列。
在一些实施例中,线程监测模块301还用于:当所述任务执行完成后,返回执行所述获取目标处理单元对应的任务队列,并判断所述任务队列中是否存在预设类型的线程。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
应当说明的是,本申请实施例提供的任务调度装置与上文实施例中的任务调度方法属于同一构思,在任务调度装置上可以运行任务调度方法实施例中提供的任一方法,其具体实现过程详见任务调度方法实施例,此处不再赘述。
由上可知,本申请实施例提出的任务调度装置包括线程监测模块301、目标确定模块302以及任务执行模块303,在从任务队列中选择线程执行时,线程监测模块301先判断该任务队列中是否存在预设类型的线程,如果该任务队列中存在预设类型的线程,则目标确定模块302将任务队列中的预设类型的线程作为目标线程,任务执行模块303从任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务,如果任务队列中没有预设类型的线程,则任务执行模块303执行任务队列中运行时间最短的线程对应的任务,通过这种方式将与直接或间接执行界面绘制任务的线程标记为预设类型的线程,而这些直接或间接执行界面绘制任务的线程会影响到用户体验,内核在执行任务时,会检测任务队列中是否存在这些影响用户体验的线程,如果有,则优先选择这些预设类型的线程,快速占用CPU资源,可以有效减少预设类型的线程的等待时间,避免后台任务线程过多,导致与用户体验相关线程不能及时得到调度的情况,从而改善交互场景下的用户体验,减少系统卡顿的产生。
本申请实施例还提供一种电子设备。所述电子设备可以是智能手机、平板电脑等设备。请参阅图5,图5为本申请实施例提供的电子设备的第一种结构示意图。电子设备400包括处理器401和存储器402。其中,处理器401与存储器402电性连接。
处理器401是电子设备400的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或调用存储在存储器402内的计算机程序,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
存储器402可用于存储计算机程序和数据。存储器402存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器401通过调用存储在存储器402的计算机程序,从而执行各种功能应用以及数据处理。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;
当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程;
从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;
当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
在一些实施例中,请参阅图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中的计算机程序,从而实现各种功能:
获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;
当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程;
从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;
当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
由上可知,本申请实施例提供了一种电子设备,所述电子设备在从任务队列中选择线程执行时,先判断该任务队列中是否存在预设类型的线程,如果该任务队列中存在预设类型的线程,则将任务队列中的预设类型的线程作为目标线程,从任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务,如果任务队列中没有预设类型的线程,则执行任务队列中运行时间最短的线程对应的任务,通过这种方式将与直接或间接执行界面绘制任务的线程标记为预设类型的线程,而这些直接或间接执行界面绘制任务的线程会影响到用户体验,内核在执行任务时,会检测任务队列中是否存在这些影响用户体验的线程,如果有,则优先选择这些预设类型的线程,快速占用CPU资源,可以有效减少预设类型的线程的等待时间,避免后台任务线程过多,导致与用户体验相关线程不能及时得到调度的情况,从而改善交互场景下的用户体验,减少系统卡顿的产生。
本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,所述计算机执行上述任一实施例所述的任务调度方法。
需要说明的是,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可以存储于计算机可读存储介质中,所述存储介质可以包括但不限于:只读存储器(ROM,Read OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
此外,本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
以上对本申请实施例所提供的任务调度方法、装置、存储介质及电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种任务调度方法,其特征在于,包括:
获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;
当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程;
从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;
当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
2.如权利要求1所述的任务调度方法,其特征在于,所述判断所述任务队列中是否存在预设类型的线程,包括:
判断所述任务队列中是否存在具有预设标签的线程。
3.如权利要求1所述的任务调度方法,其特征在于,所述方法还包括:
当检测到所述任务队列中有预设类型的线程进入堵塞状态时,检测所述任务队列中是否存在与进入堵塞状态的预设类型的线程之间具有资源约束关系的关联线程;
当所述任务队列中存在所述关联线程时,将所述关联线程标记为预设类型的线程。
4.如权利要求1所述的任务调度方法,其特征在于,所述方法还包括:
当有新线程创建时,判断所述新线程是否用于执行界面绘制任务;
若所述新线程用于执行界面绘制任务,将所述新线程标记为预设类型的线程;
当根据资源分配规则将所述线程分配至目标处理单元时,将所述新线程添加至所述目标处理单元的任务队列。
5.如权利要求4所述的任务调度方法,其特征在于,所述若所述新线程用于执行界面绘制任务,将所述新线程标记为预设类型的线程,包括:
若所述新线程用于执行界面绘制任务,为所述线程添加预设标签,以将所述线程标记为预设类型的线程。
6.如权利要求4所述的任务调度方法,其特征在于,所述判断所述新线程是否用于执行界面绘制任务之后,还包括:
若所述新线程不用于执行界面绘制任务,则在根据资源分配规则将所述线程分配至目标处理单元时,将所述线程添加至所述目标处理单元的任务队列。
7.如权利要求1所述的任务调度方法,其特征在于,所述执行所述任务队列中运行时间最短的线程对应的任务之后,还包括:
当所述任务执行完成后,返回执行所述获取目标处理单元对应的任务队列,并判断所述任务队列中是否存在预设类型的线程。
8.一种任务调度装置,其特征在于,包括:
线程监测模块,用于获取待执行的任务队列,并判断所述任务队列中是否存在预设类型的线程,其中,预设类型的线程为直接或间接执行界面绘制任务的线程;
目标确定模块,用于当所述任务队列中存在预设类型的线程时,将所述任务队列中的预设类型的线程作为目标线程;
任务执行模块,用于从所述任务队列中确定出运行时间最短的目标线程,并执行运行时间最短的目标线程对应的任务;
所述任务执行模块,还用于当所述任务队列中不存在具有预设标签的线程时,执行所述任务队列中运行时间最短的线程对应的任务。
9.一种存储介质,其上存储有计算机程序,其特征在于,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至7任一项所述的任务调度方法。
10.一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,其特征在于,所述处理器通过调用所述计算机程序,用于执行如权利要求1至7任一项所述的任务调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010266780.XA CN113495780A (zh) | 2020-04-07 | 2020-04-07 | 任务调度方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010266780.XA CN113495780A (zh) | 2020-04-07 | 2020-04-07 | 任务调度方法、装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113495780A true CN113495780A (zh) | 2021-10-12 |
Family
ID=77994739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010266780.XA Pending CN113495780A (zh) | 2020-04-07 | 2020-04-07 | 任务调度方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113495780A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115167973A (zh) * | 2022-06-13 | 2022-10-11 | 广西柳州晨生信息科技有限公司 | 一种云计算数据中心的数据处理系统 |
WO2023125359A1 (zh) * | 2021-12-28 | 2023-07-06 | 华为技术有限公司 | 一种任务处理的方法及装置 |
CN117421052A (zh) * | 2023-11-02 | 2024-01-19 | 深圳大学 | 数据流任务的硬件自动化执行方法、系统、设备及介质 |
-
2020
- 2020-04-07 CN CN202010266780.XA patent/CN113495780A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023125359A1 (zh) * | 2021-12-28 | 2023-07-06 | 华为技术有限公司 | 一种任务处理的方法及装置 |
CN115167973A (zh) * | 2022-06-13 | 2022-10-11 | 广西柳州晨生信息科技有限公司 | 一种云计算数据中心的数据处理系统 |
CN115167973B (zh) * | 2022-06-13 | 2023-12-15 | 鄂尔多斯市云泰互联科技有限公司 | 一种云计算数据中心的数据处理系统 |
CN117421052A (zh) * | 2023-11-02 | 2024-01-19 | 深圳大学 | 数据流任务的硬件自动化执行方法、系统、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106716365B (zh) | 异构线程调度 | |
JP6320520B2 (ja) | 多数の優先順キューに対するスレッドの割り当ておよびスケジューリング | |
US9858115B2 (en) | Task scheduling method for dispatching tasks based on computing power of different processor cores in heterogeneous multi-core processor system and related non-transitory computer readable medium | |
CN113495780A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
CN111597042A (zh) | 业务线程运行方法、装置、存储介质及电子设备 | |
CN110968415B (zh) | 多核处理器的调度方法、装置及终端 | |
CN111831414A (zh) | 线程迁移方法、装置、存储介质及电子设备 | |
CN111831434A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN111831438A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN111831440A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN111813521A (zh) | 线程调度方法、装置、存储介质及电子设备 | |
CN111813520A (zh) | 线程调度方法、装置、存储介质及电子设备 | |
CN114637536A (zh) | 任务处理方法、计算协处理器、芯片及计算机设备 | |
CN111831433A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN112256421A (zh) | 通信处理方法、装置、存储介质及电子设备 | |
CN111597044A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
CN111831432B (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN111831436A (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN111475299B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111831442A (zh) | 一种资源分配的方法、装置、存储介质及电子设备 | |
CN111831439A (zh) | Io请求的处理方法、装置、存储介质及电子设备 | |
CN111831443A (zh) | 处理器状态调整方法、装置、存储介质及电子设备 | |
CN111831462A (zh) | Io请求的处理方法、装置、存储介质及电子设备 | |
CN116795503A (zh) | 任务调度方法、任务调度装置、图形处理器及电子设备 | |
CN111831435A (zh) | 内存分配方法、装置、存储介质及电子设备 |
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 |