CN109840149A - 任务调度方法、装置、设备及存储介质 - Google Patents
任务调度方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109840149A CN109840149A CN201910113945.7A CN201910113945A CN109840149A CN 109840149 A CN109840149 A CN 109840149A CN 201910113945 A CN201910113945 A CN 201910113945A CN 109840149 A CN109840149 A CN 109840149A
- Authority
- CN
- China
- Prior art keywords
- subtask
- committed
- task
- upper limit
- thread pool
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提出一种任务调度方法、装置、设备及计算机可读存储介质。其中任务调度方法包括:将待执行的任务按照任务所需资源类型拆分成多个子任务;将所述多个子任务按照执行顺序加入队列;获取线程池中处于运行状态的子任务的个数;根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。本发明实施例的可动态分配的任务调度方法可优化使用CPU资源,任务可以得到快速的响应,可有效减轻系统资源消耗,提高系统的流畅度,大幅提升系统性能指标。
Description
技术领域
本发明涉及信息技术领域,尤其涉及一种任务调度方法、装置、设备及存储介质。
背景技术
在系统开发过程中,例如在开发Android(安卓)应用时,经常会涉及到一些非常耗时的操作。诸如请求网络资源、计算复杂的数学运算、读取文件内容、解析视频流数据等,这些处理过程通常都会耗费数秒钟的时间。Android的页面刷新工作都是在主线程进行的,如果将这些任务都放在主线程中进行操作,那么必然会导致页面卡顿,因为这些操作占用了页面刷新所需要的CPU(Central Processing Unit,中央处理器)资源。因此,通常的处理方法是将这些耗时的操作放在子线程中处理。
Android系统中对于线程的管理,沿用了Java的线程池。可以对线程进行复用,而不需要不断生成新的线程去应对源源不断的任务,这种方法对资源的消耗比较小。但是Java的线程池对于线程的管理是非常有限的,仅仅是非常简单地对线程的复用,而没有对线程池中的任务进行合理调度,从而使任务响应速度较慢,不能有效地利用系统资源。
发明内容
本发明实施例提供一种任务调度方法、装置、设备及计算机可读存储介质,以至少解决现有技术中的一个或多个技术问题。
第一方面,本发明实施例提供了一种任务调度方法,包括:
将待执行的任务按照任务所需资源类型拆分成多个子任务;
将所述多个子任务按照执行顺序加入队列;
获取线程池中处于运行状态的子任务的个数;
根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
在一种实施方式中,还包括:所述任务所需资源类型包括中央处理器密集型和输入输出密集型。
在一种实施方式中,所述根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池,包括:
根据中央处理器的核心数量设置线程数上限;
根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
在一种实施方式中,所述线程数上限包括第一线程数上限;所述根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池,包括:
判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限;
如果是,则将所述队列中的第一个子任务作为待提交子任务;
获取所述待提交子任务的任务所需资源类型;
当所述待提交子任务的任务所需资源类型为输入输出密集型时,将所述待提交子任务提交至所述线程池;返回执行所述判断的步骤。
在一种实施方式中,所述线程数上限包括还第二线程数上限;所述获取所述待提交子任务的任务所需资源类型之后,还包括:
当所述待提交子任务的任务所需资源类型为中央处理器密集型时,判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限;
如果是,则将所述待提交子任务提交至所述线程池;返回执行所述判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限的步骤。
在一种实施方式中,所述判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限之后,还包括:
如果否,则将与所述待提交子任务相邻的后一个子任务作为新的待提交子任务,针对所述新的待提交子任务,返回执行所述获取所述待提交子任务的任务所需资源类型的步骤。
在一种实施方式中,所述获取线程池中处于运行状态的子任务的个数,包括:
在所述线程池中的各个所述子任务中设置回调函数;
通过所述回调函数获取线程池中各个所述子任务的状态,所述状态包括:运行状态或结束状态;
根据所述线程池中各个所述子任务的状态,统计在线程池中处于运行状态的子任务的个数。
在一种实施方式中,所述方法还包括:
当所述线程池中出现状态由运行状态转换为结束状态的子任务时,返回执行所述将所述队列中的第一个子任务作为待提交子任务的步骤。
第二方面,本发明实施例提供了一种任务调度装置,包括:
拆分单元,用于将待执行的任务按照任务所需资源类型拆分成多个子任务;
加入单元,用于将所述多个子任务按照执行顺序加入队列;
获取单元,用于获取线程池中处于运行状态的子任务的个数;
提交单元,用于根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
在一种实施方式中,所述任务所需资源类型包括中央处理器密集型和输入输出密集型。
在一种实施方式中,所述提交单元包括:
设置子单元,用于根据中央处理器的核心数量设置线程数上限;
提交子单元,用于根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
在一种实施方式中,所述线程数上限包括第一线程数上限;所述提交子单元用于:
判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限;
如果是,则将所述队列中的第一个子任务作为待提交子任务;
获取所述待提交子任务的任务所需资源类型;
当所述待提交子任务的任务所需资源类型为输入输出密集型时,将所述待提交子任务提交至所述线程池;返回执行所述判断的步骤。
在一种实施方式中,所述线程数上限包括还第二线程数上限;所述提交子单元还用于:
在所述获取所述待提交子任务的任务所需资源类型之后,当所述待提交子任务的任务所需资源类型为中央处理器密集型时,判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限;
如果是,则将所述待提交子任务提交至所述线程池;返回执行所述判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限的步骤。
在一种实施方式中,所述提交子单元还用于:
在所述判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限之后,如果否,则将与所述待提交子任务相邻的后一个子任务作为新的待提交子任务,针对所述新的待提交子任务,返回执行所述获取所述待提交子任务的任务所需资源类型的步骤。
在一种实施方式中,所述获取单元用于:
在所述线程池中的各个所述子任务中设置回调函数;
通过所述回调函数获取线程池中各个所述子任务的状态,所述状态包括:运行状态或结束状态;
根据所述线程池中各个所述子任务的状态,统计在线程池中处于运行状态的子任务的个数。
在一种实施方式中,所述提交子单元还用于:
当所述线程池中出现状态由运行状态转换为结束状态的子任务时,返回执行所述将所述队列中的第一个子任务作为待提交子任务的步骤。
第三方面,本发明实施例提供了一种任务调度设备,所述设备的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,所述设备的结构中包括处理器和存储器,所述存储器用于存储支持所述设备执行上述方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。所述设备还可以包括通信接口,用于与其他设备或通信网络通信。
第四方面,本发明实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现上述第一方面中任一所述的方法。
上述技术方案具有如下优点或有益效果:通过使用可动态分配的任务调度方法,即根据处于运行状态的子任务的个数和各子任务的任务所需资源类型对线程池中的任务进行合理调度,可优化使用CPU资源,任务可以得到快速的响应,可有效减轻系统资源消耗,提高系统的流畅度,大幅提升系统性能指标。
上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本发明进一步的方面、实施方式和特征将会是容易明白的。
附图说明
在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本发明公开的一些实施方式,而不应将其视为是对本发明范围的限制。
图1为本发明实施例提供的任务调度方法的流程图;
图2为本发明另一实施例提供的任务调度方法的流程图;
图3为本发明又一实施例提供的任务调度方法的流程图;
图4为本发明实施例提供的获取线程池中处于运行状态的子任务的个数的流程图;
图5为本发明实施例提供的任务调度装置的结构框图;
图6为本发明实施例提供的任务调度装置的提交单元的结构框图;
图7为本发明实施例提供的任务调度设备的结构框图。
具体实施方式
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本发明的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
本发明实施例提供了一种任务调度方法,如图1所示,本发明实施例的任务调度方法包括:
步骤S110,将待执行的任务按照任务所需资源类型拆分成多个子任务;
步骤S120,将所述多个子任务按照执行顺序加入队列;
步骤S130,获取线程池中处于运行状态的子任务的个数;
步骤S140,根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
对于线程管理来说,Java线程池是一个可行的选择方案。它可以对线程进行复用,避免了重复创建产生的资源使用浪费和性能问题。但是在现有技术中,Java线程池对于任务执行上的调度,只有先来先执行、等待队列等这样简单的处理方式。
本发明实施例根据待执行的任务的当前状态和任务所需资源类型对待执行的任务进行动态调度,可优化地使用系统资源,提升系统性能指标。以Android平台为例,对于线程的管理,Android沿用了Java的线程池方案。具体而言,可根据待执行的任务的当前状态分析当前的CPU使用情况,再针对当前的CPU使用情况动态的选择任务执行,实现了可动态分配任务调度。
具体地,在步骤S110中,可根据待执行的任务中的各个执行步骤的所需资源类型,将待执行的任务拆分成多个子任务。在一个示例中,待执行的任务中包括若干个执行步骤,按照各步骤执行顺序分别为步骤1、步骤2、步骤3和步骤4。其中,步骤1和步骤3的所需资源类型为第一资源类型,步骤2和步骤4的所需资源类型为第二资源类型。则可按照任务所需资源类型,将上述待执行的任务拆分成与上述步骤1、步骤2、步骤3和步骤4对应的四个子任务。
在步骤S120中,可创建用于存储拆分后的子任务的队列,将所述多个子任务作为队列元素按照执行顺序加入队列。队列是一种操作受限制的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。队列的数据元素又称为队列元素。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出线性表。
在步骤S130和步骤S140中,通过获取线程池中处于运行状态的子任务的个数,从而可获知当前的CPU使用情况。进而根据当前的CPU使用情况及队列中的子任务的任务所需资源类型,将各个子任务提交至线程池,动态地进行任务调度。
在一种实施方式中,还包括:所述任务所需资源类型包括CPU密集型和IO(输入输出,Input Output)密集型。
为了对任务更好地进行调度,需要对任务的类型进行分类。对任务进行分类是进行任务动态调度的基础。在一个示例中,根据任务所需资源类型可将任务的类型分为CPU密集型(中央处理器密集型)和IO密集型(输入输出密集型)。
其中,CPU密集型任务的特点是任务的大部分时间用来做计算、逻辑判断等CPU操作。例如,一种典型的CPU密集型任务可称为计算密集型任务。计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等。这些计算的执行在很大程度上依靠CPU的运算能力。
IO密集型任务的特点是CPU资源消耗很少,任务的大部分时间都在等待IO操作完成。由于IO操作的速度远远低于CPU操作和内存操作的速度,所以IO密集型任务执行期间,大部分的时间都消耗在IO上。例如可能99%的时间消耗在IO上,而消耗在CPU上的时间很少。涉及到网络、磁盘IO的任务都属于IO密集型任务。
在真实的生产环境中,使用者提交的任务通常都是一个非常复杂的任务。复杂的任务可能是由多个CPU密集型操作与多个IO密集型操作交替组合而成。因此在对任务进行分类之后,第二个重要的操作是对任务进行拆分,将大任务拆分成若干个的单一类型的子任务,进而对子任务进行调度。拆分后的子任务的执行可以按照使用者初始创建大任务的顺序执行,不改变原有的执行顺序。
图2为本发明另一实施例提供的任务调度方法的流程图。参见图2,在一个示例中,待执行的任务中包括两个执行步骤,按照各步骤执行顺序分别为步骤1和步骤2。其中,步骤1的所需资源类型为IO密集型,步骤2的所需资源类型为CPU密集型。可按照任务所需资源类型,将上述待执行的任务拆分成与上述步骤1和步骤2对应的两个子任务。图2中的任务1和任务2分别表示与上述步骤1和步骤2对应的两个子任务。
经过对任务进行分类、拆分两个步骤之后,就可以将拆分后的子任务提交到用于进行任务调度的调度中心。由调度中心将各个子任务提交至线程池。调度中心控制所有子任务进出线程池,包括提交子任务的时间,具体提交哪个子任务等。
在一种实施方式中,调度中心最终将子任务的Runnable提交至线程池。其中,Runnable(中文释义为适合猎取的、可运行态)是子任务的代码块。在java中,实现Runnable接口是实现多线程的一种方式。Runnable在Java中是线程执行的最小单元,操作代码的载体。一个子任务对应一个Runnable,由一个线程来执行一个Runnable。
在一种可能的实施方式中,所述根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池,包括:
根据CPU的核心数量设置线程数上限;
根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
在这种实施方式中,首先根据当前CPU的核心数量控制线程池的线程数上限。在一个示例中,如果当前CPU的核心数量是N,则可设置线程数上限为2*N,即线程池初始数量选用2*N。
在另一个示例中,所述线程数上限可包括第一线程数上限和第二线程数上限。第一线程数上限用于限制正在执行的IO密集型任务的数量,第二线程数上限用于限制正在执行的CPU密集型任务的数量。例如,可设置第二线程数上限为N+1,第一线程数上限为2*N。具体地,如果当前CPU的核心数量是N,若当前所有的线程执行的任务都是CPU密集型的,通常可控制线程数不超过第二线程数上限,即不超过N+1。若当前所有的线程执行的任务都是IO密集型的,由于IO密集型任务的CPU占用率不高,为了有效利用CPU的资源,所以可控制线程数不超过第一线程数上限,即线程池初始数量可选用2*N。
图3为本发明又一实施例提供的任务调度方法的流程图。如图3所示,在一种实施方式中,所述线程数上限可以包括第一线程数上限和第二线程数上限。
相应地,所述根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池,可以包括:
步骤S310:判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限;如果是,则执行步骤S320。
步骤S320:将所述队列中的第一个子任务作为待提交子任务。
步骤S330:获取所述待提交子任务的任务所需资源类型。
步骤S340:判断所述待提交子任务的任务所需资源类型是IO密集型,还是CPU密集型。当判断结果为IO密集型时,执行步骤S350;当判断结果为CPU密集型时,执行步骤S360。
步骤S350:将所述待提交子任务提交至所述线程池;返回执行所述步骤S310。需要强调的是,将待提交子任务提交至线程池之后,该待提交子任务即从队列中被删除,则之前队列中的第二个子任务即成为第一个子任务。
步骤360:判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限。如果是,则执行步骤S370;否则,执行步骤S380。
步骤S370:将所述待提交子任务提交至所述线程池;返回执行所述步骤S310。
步骤S380:将与所述待提交子任务相邻的后一个子任务作为新的待提交子任务,针对所述新的待提交子任务,返回执行所述步骤S330。
在一个示例中,如果当前CPU的核心数量是N,可设置第二线程数上限为N+1,第一线程数上限为2*N。任务调度的具体逻辑如下:
1)判断正在执行的子任务的总数,也就是线程池中正在执行的线程总数,是否小于2*N。如果该总数大于或等于2*N,则不在线程池中创建线程。也就是控制线程池的最大线程数为2*N。
2)如果该总数小于2*N,则判断排在队列中的第一个子任务是CPU密集型还是IO密集型。
3)如果是IO密集型,则直接将该子任务对应的Runnable提交至线程池。
4)如果是CPU密集型,则判断正在执行的子任务的总数是否小于N;如果总数小于N,则将该子任务对应的Runnable提交至线程池。如果总数大于或等于N,则执行步骤5)。
5)判断排在任务队列中的该子任务的后一个子任务是CPU密集型还是IO密集型,然后返回执行上述步骤3)或步骤4)。
图4为本发明实施例提供的获取线程池中处于运行状态的子任务的个数的流程图。如图4所示,在一种实施方式中,图1中的步骤S130,所述获取线程池中处于运行状态的子任务的个数,具体可包括:
步骤S410,在所述线程池中的各个所述子任务中设置回调函数;
步骤S420,通过所述回调函数获取线程池中各个所述子任务的状态,所述状态包括:运行状态或结束状态;
步骤S430,根据所述线程池中各个所述子任务的状态,统计在线程池中处于运行状态的子任务的个数。
再参见图2,调度中心可以根据当前CPU的负载状态选择不同类型的任务提交至线程池。现有的Java线程池无法获取到该负载状态。为了能够得到CPU当前的负载状态,本发明实施例对线程池中子任务的处理开始、处理结束进行了监控。具体地,在Runnable.run()方法的前后设置了callback回调,可以实时地回调调度中心。在子任务开始执行和结束执行时使用回调函数回调调度中心,使调度中心知道子任务的运行状态,知道哪些子任务在执行,正在执行的子任务具体是CPU密集型还是IO密集型,也可以统计正在执行的子任务的数量。通过这种方法调度中心可统计到当前CPU的负载状态,从而在进行任务提交时可以根据当前CPU的负载状态进行有效地调度。
再参见图3,在一种实施方式中,所述方法还包括:
在步骤S390中,若通过所述回调函数获取到线程池中某个所述子任务由运行状态转换为结束状态,则返回执行步骤S320:将所述队列中的第一个子任务作为待提交子任务,然后再执行步骤S330以及后续步骤。
在前述示例中,当前CPU的核心数量是N,设置第二线程数上限为N+1,第一线程数上限为2*N。任务调度的具体逻辑还包括:
调度中心通过回调函数获取到某个子任务执行完毕的信息,将正在执行的子任务的总数减1,然后判断排在任务队列最前面的子任务是CPU密集型还是IO密集型。根据判断结果,接下来执行上述步骤3),或者执行上述步骤4)和步骤5)。
上述技术方案具有如下优点或有益效果:通过使用可动态分配的任务调度方法,即根据处于运行状态的子任务的个数和各子任务的任务所需资源类型对线程池中的任务进行合理调度,可优化使用CPU资源,任务可以得到快速的响应,可有效减轻系统资源消耗,提高系统的流畅度,大幅提升系统性能指标。
本发明实施例还提出一种任务调度装置。如图5所示,本发明实施例提出的任务调度装置可以包括:
拆分单元100,用于将待执行的任务按照任务所需资源类型拆分成多个子任务;
加入单元200,用于将所述多个子任务按照执行顺序加入队列;
获取单元300,用于获取线程池中处于运行状态的子任务的个数;
提交单元400,用于根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
在一种实施方式中,所述任务所需资源类型包括CPU密集型和IO密集型。
图6为本发明实施例提供的任务调度装置的提交单元的结构框图。如图6所示,在一种实施方式中,所述提交单元400包括:
设置子单元410,用于根据CPU的核心数量设置线程数上限;
提交子单元420,用于根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
在一种实施方式中,所述线程数上限包括第一线程数上限;所述提交子单元420用于:
判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限;
如果是,则将所述队列中的第一个子任务作为待提交子任务;
获取所述待提交子任务的任务所需资源类型;
当所述待提交子任务的任务所需资源类型为IO密集型时,将所述待提交子任务提交至所述线程池;返回执行所述判断的步骤。
在一种实施方式中,所述线程数上限还包括第二线程数上限;所述提交子单元420还用于:
在所述获取所述待提交子任务的任务所需资源类型之后,当所述待提交子任务的任务所需资源类型为CPU密集型时,判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限;
如果是,则将所述待提交子任务提交至所述线程池;返回执行所述判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限的步骤。
在一种实施方式中,所述提交子单元420还用于:
在所述判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限之后,如果否,则将与所述待提交子任务相邻的后一个子任务作为新的待提交子任务,针对所述新的待提交子任务,返回执行所述获取所述待提交子任务的任务所需资源类型的步骤。
在一种实施方式中,所述获取单元300用于:
在所述线程池中的各个所述子任务中设置回调函数;
通过所述回调函数获取线程池中各个所述子任务的状态,所述状态包括:运行状态或结束状态;
根据所述线程池中各个所述子任务的状态,统计在线程池中处于运行状态的子任务的个数。
在一种实施方式中,所述提交子单元400还用于:
当所述线程池中出现状态由运行状态转换为结束状态的子任务时,返回执行所述将所述队列中的第一个子任务作为待提交子任务的步骤。本发明实施例的任务调度装置中各单元的功能可以参见上述方法的相关描述,在此不再赘述。
在一个可能的设计中,任务调度设备的结构中包括处理器和存储器,所述存储器用于存储支持任务调度设备执行上述任务调度方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。所述任务调度设备还可以包括通信接口,任务调度设备与其他设备或通信网络通信。
图7为本发明实施例提供的任务调度设备的结构框图。如图7所示,该设备包括:存储器101和处理器102,存储器101内存储有可在处理器102上运行的计算机程序。所述处理器102执行所述计算机程序时实现上述实施例中的任务调度方法。所述存储器101和处理器102的数量可以为一个或多个。
该设备还包括:
通信接口103,用于与外界设备进行通信,进行数据交互传输。
存储器101可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
如果存储器101、处理器102和通信接口103独立实现,则存储器101、处理器102和通信接口103可以通过总线相互连接并完成相互间的通信。所述总线可以是工业标准体系结构(ISA,Industry Standard Architecture)总线、外部设备互连(PCI,PeripheralComponent)总线或扩展工业标准体系结构(EISA,Extended Industry StandardComponent)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器101、处理器102及通信接口103集成在一块芯片上,则存储器101、处理器102及通信接口103可以通过内部接口完成相互间的通信。
又一方面,本发明实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现上述任务调度方法中任一所述的方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (18)
1.一种任务调度方法,其特征在于,包括:
将待执行的任务按照任务所需资源类型拆分成多个子任务;
将所述多个子任务按照执行顺序加入队列;
获取线程池中处于运行状态的子任务的个数;
根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
2.根据权利要求1所述的方法,其特征在于,还包括:所述任务所需资源类型包括中央处理器密集型和输入输出密集型。
3.根据权利要求2所述的方法,其特征在于,所述根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池,包括:
根据中央处理器的核心数量设置线程数上限;
根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
4.根据权利要求3所述的方法,其特征在于,所述线程数上限包括第一线程数上限;
所述根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池,包括:
判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限;
如果是,则将所述队列中的第一个子任务作为待提交子任务;
获取所述待提交子任务的任务所需资源类型;
当所述待提交子任务的任务所需资源类型为输入输出密集型时,将所述待提交子任务提交至所述线程池;返回执行所述判断的步骤。
5.根据权利要求4所述的方法,其特征在于,所述线程数上限还包括第二线程数上限;
所述获取所述待提交子任务的任务所需资源类型之后,还包括:
当所述待提交子任务的任务所需资源类型为中央处理器密集型时,判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限;
如果是,则将所述待提交子任务提交至所述线程池;返回执行所述判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限的步骤。
6.根据权利要求5所述的方法,其特征在于,所述判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限之后,还包括:
如果否,则将与所述待提交子任务相邻的后一个子任务作为新的待提交子任务,针对所述新的待提交子任务,返回执行所述获取所述待提交子任务的任务所需资源类型的步骤。
7.根据权利要求4-6中任一项所述的方法,其特征在于,所述获取线程池中处于运行状态的子任务的个数,包括:
在所述线程池中的各个所述子任务中设置回调函数;
通过所述回调函数获取线程池中各个所述子任务的状态,所述状态包括:运行状态或结束状态;
根据所述线程池中各个所述子任务的状态,统计在线程池中处于运行状态的子任务的个数。
8.根据权利要求7所述的方法,其特征在于,还包括:
当所述线程池中出现状态由运行状态转换为结束状态的子任务时,返回执行所述将所述队列中的第一个子任务作为待提交子任务的步骤。
9.一种任务调度装置,其特征在于,包括:
拆分单元,用于将待执行的任务按照任务所需资源类型拆分成多个子任务;
加入单元,用于将所述多个子任务按照执行顺序加入队列;
获取单元,用于获取线程池中处于运行状态的子任务的个数;
提交单元,用于根据所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
10.根据权利要求9所述的装置,其特征在于,还包括:所述任务所需资源类型包括中央处理器密集型和输入输出密集型。
11.根据权利要求10所述的装置,其特征在于,所述提交单元包括:
设置子单元,用于根据中央处理器的核心数量设置线程数上限;
提交子单元,用于根据所述线程数上限、所述处于运行状态的子任务的个数和所述队列中的子任务的任务所需资源类型,将各个所述子任务提交至所述线程池。
12.根据权利要求11所述的装置,其特征在于,所述线程数上限包括第一线程数上限;
所述提交子单元用于:判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限;如果是,则将所述队列中的第一个子任务作为待提交子任务;获取所述待提交子任务的任务所需资源类型;当所述待提交子任务的任务所需资源类型为输入输出密集型时,将所述待提交子任务提交至所述线程池;返回执行所述判断的步骤。
13.根据权利要求12所述的装置,其特征在于,所述线程数上限还包括第二线程数上限;
所述提交子单元还用于:在所述获取所述待提交子任务的任务所需资源类型之后,当所述待提交子任务的任务所需资源类型为中央处理器密集型时,判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限;如果是,则将所述待提交子任务提交至所述线程池;返回执行所述判断所述处于运行状态的子任务的个数是否小于所述第一线程数上限的步骤。
14.根据权利要求13所述的装置,其特征在于,所述提交子单元还用于:
在所述判断所述处于运行状态的子任务的个数是否小于所述第二线程数上限之后,如果否,则将与所述待提交子任务相邻的后一个子任务作为新的待提交子任务,针对所述新的待提交子任务,返回执行所述获取所述待提交子任务的任务所需资源类型的步骤。
15.根据权利要求12-14中任一项所述的装置,其特征在于,所述获取单元用于:
在所述线程池中的各个所述子任务中设置回调函数;通过所述回调函数获取线程池中各个所述子任务的状态,所述状态包括:运行状态或结束状态;根据所述线程池中各个所述子任务的状态,统计在线程池中处于运行状态的子任务的个数。
16.根据权利要求15所述的装置,其特征在于,所述提交子单元还用于:
当所述线程池中出现状态由运行状态转换为结束状态的子任务时,返回执行所述将所述队列中的第一个子任务作为待提交子任务的步骤。
17.一种任务调度设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。
18.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910113945.7A CN109840149B (zh) | 2019-02-14 | 2019-02-14 | 任务调度方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910113945.7A CN109840149B (zh) | 2019-02-14 | 2019-02-14 | 任务调度方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109840149A true CN109840149A (zh) | 2019-06-04 |
CN109840149B CN109840149B (zh) | 2021-07-30 |
Family
ID=66884688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910113945.7A Active CN109840149B (zh) | 2019-02-14 | 2019-02-14 | 任务调度方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109840149B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532103A (zh) * | 2019-09-09 | 2019-12-03 | 北京西山居互动娱乐科技有限公司 | 一种多任务处理的方法及装置 |
CN112231095A (zh) * | 2020-09-02 | 2021-01-15 | 北京航空航天大学 | 基于机器学习的面向资源管理的云任务细粒度分类方法 |
CN114237860A (zh) * | 2022-02-28 | 2022-03-25 | 广东睿江云计算股份有限公司 | 一种自动化任务流调度方法以及系统 |
CN115361382A (zh) * | 2022-08-10 | 2022-11-18 | 北京友友天宇系统技术有限公司 | 基于数据群组的数据处理方法、装置、设备和存储介质 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030233485A1 (en) * | 2002-06-13 | 2003-12-18 | Mircrosoft Corporation | Event queue |
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN101788920A (zh) * | 2010-02-05 | 2010-07-28 | 北京航空航天大学 | 一种基于处理器分区技术的cpu虚拟化方法 |
EP2256632A1 (en) * | 2009-05-26 | 2010-12-01 | Telefonaktiebolaget L M Ericsson (publ) | Multi-processor scheduling |
CN104216768A (zh) * | 2014-09-22 | 2014-12-17 | 北京金山安全软件有限公司 | 一种数据处理方法及装置 |
CN104679593A (zh) * | 2015-03-13 | 2015-06-03 | 浪潮集团有限公司 | 一种基于smp系统的任务调度优化方法 |
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN106095585A (zh) * | 2016-06-22 | 2016-11-09 | 中国建设银行股份有限公司 | 任务请求处理方法、装置和企业信息系统 |
US20170169371A1 (en) * | 2015-12-14 | 2017-06-15 | Successfactors, Inc. | Adaptive job scheduling utilizing packaging and threads |
CN107305548A (zh) * | 2016-04-18 | 2017-10-31 | 北京国双科技有限公司 | 控制网络爬虫的任务分配方法和装置 |
CN107818012A (zh) * | 2016-09-12 | 2018-03-20 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及电子设备 |
CN108681481A (zh) * | 2018-03-13 | 2018-10-19 | 阿里巴巴集团控股有限公司 | 业务请求的处理方法及装置 |
CN108846632A (zh) * | 2018-05-28 | 2018-11-20 | 浙江口碑网络技术有限公司 | 线程处理方法及装置 |
CN109101330A (zh) * | 2018-08-06 | 2018-12-28 | 百度在线网络技术(北京)有限公司 | 数据获取方法、装置和系统 |
CN109240811A (zh) * | 2018-08-09 | 2019-01-18 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
-
2019
- 2019-02-14 CN CN201910113945.7A patent/CN109840149B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030233485A1 (en) * | 2002-06-13 | 2003-12-18 | Mircrosoft Corporation | Event queue |
EP2256632A1 (en) * | 2009-05-26 | 2010-12-01 | Telefonaktiebolaget L M Ericsson (publ) | Multi-processor scheduling |
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN101788920A (zh) * | 2010-02-05 | 2010-07-28 | 北京航空航天大学 | 一种基于处理器分区技术的cpu虚拟化方法 |
CN104216768A (zh) * | 2014-09-22 | 2014-12-17 | 北京金山安全软件有限公司 | 一种数据处理方法及装置 |
CN104679593A (zh) * | 2015-03-13 | 2015-06-03 | 浪潮集团有限公司 | 一种基于smp系统的任务调度优化方法 |
US20170169371A1 (en) * | 2015-12-14 | 2017-06-15 | Successfactors, Inc. | Adaptive job scheduling utilizing packaging and threads |
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN107305548A (zh) * | 2016-04-18 | 2017-10-31 | 北京国双科技有限公司 | 控制网络爬虫的任务分配方法和装置 |
CN106095585A (zh) * | 2016-06-22 | 2016-11-09 | 中国建设银行股份有限公司 | 任务请求处理方法、装置和企业信息系统 |
CN107818012A (zh) * | 2016-09-12 | 2018-03-20 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及电子设备 |
CN108681481A (zh) * | 2018-03-13 | 2018-10-19 | 阿里巴巴集团控股有限公司 | 业务请求的处理方法及装置 |
CN108846632A (zh) * | 2018-05-28 | 2018-11-20 | 浙江口碑网络技术有限公司 | 线程处理方法及装置 |
CN109101330A (zh) * | 2018-08-06 | 2018-12-28 | 百度在线网络技术(北京)有限公司 | 数据获取方法、装置和系统 |
CN109240811A (zh) * | 2018-08-09 | 2019-01-18 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532103A (zh) * | 2019-09-09 | 2019-12-03 | 北京西山居互动娱乐科技有限公司 | 一种多任务处理的方法及装置 |
CN112231095A (zh) * | 2020-09-02 | 2021-01-15 | 北京航空航天大学 | 基于机器学习的面向资源管理的云任务细粒度分类方法 |
CN112231095B (zh) * | 2020-09-02 | 2023-03-28 | 北京航空航天大学 | 基于机器学习的面向资源管理的云任务细粒度分类方法 |
CN114237860A (zh) * | 2022-02-28 | 2022-03-25 | 广东睿江云计算股份有限公司 | 一种自动化任务流调度方法以及系统 |
CN115361382A (zh) * | 2022-08-10 | 2022-11-18 | 北京友友天宇系统技术有限公司 | 基于数据群组的数据处理方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109840149B (zh) | 2021-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109840149A (zh) | 任务调度方法、装置、设备及存储介质 | |
DE112013000486B4 (de) | Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads | |
CN105718312B (zh) | 面向生物基因测序计算任务的多队列回填作业调度方法 | |
CN104268018B (zh) | 一种Hadoop集群中的作业调度方法和作业调度器 | |
DE60131214T2 (de) | Verfahren und Anordnung zur Freilassung von Funktionseinheiten in einem multithreaded VLIW-Prozessor | |
US20030056091A1 (en) | Method of scheduling in a reconfigurable hardware architecture with multiple hardware configurations | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
DE112010005705T5 (de) | Umplanen von Workload in einer hybriden Datenverarbeitungsumgebung | |
CN103019810A (zh) | 具有不同执行优先级的计算任务的调度和管理 | |
US20150193741A1 (en) | Scheduling events for multiple invitees | |
CN102147722A (zh) | 实现中央处理器和图形处理器功能的多线程处理器及方法 | |
Kim et al. | Cross-trained staffing levels with heterogeneous learning/forgetting | |
DE112005002432B4 (de) | Verfahren und Vorrichtung zum Bereitstellen eines Quellenoperanden für eine Instruktion in einem Prozessor | |
CN105487919A (zh) | 多核心处理器系统及任务分配方法 | |
DE102013114351A1 (de) | System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren | |
DE19506435A1 (de) | Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten | |
CN102656603A (zh) | 利用性能计数器的图形流水线调度架构 | |
CN111078394B (zh) | 一种gpu线程负载均衡方法与装置 | |
CN101582043A (zh) | 一种异构计算系统动态任务分配方法 | |
US9672063B2 (en) | Scheduling, interpreting and rasterising tasks in a multi-threaded raster image processor | |
CN104156505B (zh) | 一种基于用户行为分析的Hadoop集群作业调度方法及装置 | |
US7057763B2 (en) | Multi-mode print data processing | |
CN115756866A (zh) | 负载均衡方法、装置及存储介质 | |
Long et al. | Toward OS-Level and Device-Level Cooperative Scheduling for Multitasking GPUs | |
US20050097554A1 (en) | Charge rationing aware scheduler |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210508 Address after: 100085 Baidu Building, 10 Shangdi Tenth Street, Haidian District, Beijing Applicant after: BEIJING BAIDU NETCOM SCIENCE AND TECHNOLOGY Co.,Ltd. Applicant after: Shanghai Xiaodu Technology Co.,Ltd. Address before: 100085 Baidu Building, 10 Shangdi Tenth Street, Haidian District, Beijing Applicant before: BEIJING BAIDU NETCOM SCIENCE AND TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |