CN113946410A - 任务调度方法和装置、电子设备以及计算机可读存储介质 - Google Patents
任务调度方法和装置、电子设备以及计算机可读存储介质 Download PDFInfo
- Publication number
- CN113946410A CN113946410A CN202010681454.5A CN202010681454A CN113946410A CN 113946410 A CN113946410 A CN 113946410A CN 202010681454 A CN202010681454 A CN 202010681454A CN 113946410 A CN113946410 A CN 113946410A
- Authority
- CN
- China
- Prior art keywords
- task
- scheduler
- execution
- executors
- tasks
- 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
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/5038—Allocation 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种任务调度方法和装置、电子设备以及计算机可读存储介质。该方法包括:根据接收到的任务请求生成多个任务;将所述任务请求的各任务分配给执行体并且形成执行体队列;使用线程上运行的调度器调用所述执行体队列中的执行体,以在该调度器的线程上执行与被调用的执行体对应的任务。本申请实施例通过提供将拆分后的任务分配给具有更高灵活性的执行体,并且利用运行在各线程上的调度器来对执行体进行调度,从而能够通过线程上的调度器来实现与任务所对应的执行体的分组及设置权重,以及使得由与线程绑定的调度器来执行对于具有更高灵活性的执行体的调度和切换。实现了高并发性和公平性的平衡。
Description
技术领域
本申请涉及任务管理领域,尤其涉及一种任务调度方法和装置、电子设备以及计算机可读存储介质。
背景技术
在针对大数据的交互式分析产品中,用户提交了大数据查询请求后,需要及时向用户返回查询结果,如果用户的等待时间过长,例如超过10秒,则会使得该查询任务失去了可交互性。因此,需要一种能够在任务的并发分配和执行公平性方面实现均衡的方案。
发明内容
本申请实施例提供一种任务调度方法和装置、电子设备以及计算机可读存储介质,以解决现有技术中任务调度不能兼顾公平性和灵活性的缺陷。
为达到上述目的,本申请实施例提供了一种任务调度方法,包括:
根据接收到的任务请求生成多个任务;
将所述任务请求的各任务分配给执行体并且形成执行体队列,其中,所述执行体与被分配的任务具有一一对应的关系;
使用调度器调用所述执行体队列中的执行体,以在该调度器的线程上执行与被调用的执行体对应的任务。
本申请实施例还提供了一种任务调度方法,包括:
确定执行体队列中各执行体所分配的任务的请求时间,其中,所述执行体与被分配的任务具有一一对应的关系;
当所述请求时间超过第一时间阈值时,向所述请求时间所对应的任务的用户发送超时信息;
接收所述用户针对所述超时信息发送的操作指令;
根据所述操作指令使用调度器调用所述执行体队列中对应的执行体以在该调度器的线程上执行与被调用的执行体对应的任务。
本申请实施例还提供了一种任务调度方法,所述任务调度方法应用于Linux操作***内核以外的代码环境中,所述方法包括:
根据接收到的任务请求生成多个任务;
将所述任务请求的各任务分配给由所述内核以外的底层框架调度的执行体并且形成执行体队列,其中,所述执行体与被分配的任务具有一一对应的关系;
使用所述底层框架调用所述执行体队列中的执行体,以在所述底层框架的线程上执行与被调用的执行体对应的任务。
本申请实施例还提供了一种任务调度装置,包括:
任务组生成模块,用于根据接收到的任务请求生成多个任务;
分配模块,用于将所接收到的各任务分配给执行体并且形成执行体队列,其中,所述执行体与被分配的任务具有一一对应的关系;
调度器,所述调度器用于调用所述执行体队列中的执行体,以在所述调度器的线程上执行与被调用的执行体对应的任务。
本申请实施例还提供了一种电子设备,包括:
存储器,用于存储程序;
处理器,用于运行所述存储器中存储的所述程序,所述程序运行时执行上述任务调度方法。
本申请实施例还提供了一种计算机可读存储介质,其上存储有可被处理器执行的计算机程序,其中,该程序被处理器执行时实现如上述的任务调度方法。
本申请实施例的任务调度方法和装置、电子设备以及计算机可读存储介质,能够通过提供将拆分后的任务分配给具有更高灵活性的执行体,并且利用运行在各线程上的调度器来对执行体进行调度,从而能够通过线程上的调度器来实现与任务所对应的执行体的分组及设置权重,以及使得由与线程绑定的调度器来执行对于具有更高灵活性的执行体的调度和切换。从而能够在避免消耗线程调度***资源的同时,进一步确保了灵活性,实现了高并发性和公平性的平衡。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本申请实施例提供的任务调度方法的应用场景示意图;
图2为本申请提供的任务调度方法一个实施例的流程图;
图3为本申请提供的任务调度方法另一个实施例的流程图;
图4为本申请提供的任务调度装置实施例的结构示意图;
图5为本申请提供的电子设备实施例的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
本申请实施例提供的方案可应用于任何具有任务调度能力的计算***。图1为本申请实施例提供的任务调度方法的应用场景示意图,图1所示的场景仅仅是本申请的技术方案可以应用的场景的示例之一。
随着互联网技术的发展,越来越多的用户使用互联网来进行信息的检索和查询,并且云存储技术的发展也使得可以存储大量的数据来供用户查询。在用户进行这样的大数据查询时,用户通常会使用终端或者通过互联网访问到云服务器来提交查询请求(query),例如如图1中所示,这样的查询请求会由提供搜索服务的搜索引擎服务器拆分为多个可并发执行的任务。因此,在现有技术中通常会将查询请求拆分为尽可能多的可并发执行的任务,通过执行***的多个线程来尽可能地利用CPU计算资源进行并行计算,以尽量缩短大数据查询请求的响应时间。但是,由于在实际应用中,查询请求往往还会具有不同的优先级,因此,在实际使用中,还需要针对不同优先级的请求有不同的响应速度。这对于任务的并发分配和执行提出了更高的要求,即交互式分析产品需要具备较强的并发性和公平性。例如,如图1中所示,用户1提交的查询请求1可以被拆分为任务11至任务1n的n个任务,以便于并发来执行。之后,这样拆分的n个任务可以由执行查询处理的计算服务器分配给多个工作线程来并行执行,从而在尽可能短的时间内返回处理结果。
在现有技术中,使用多线程或多进程来处理查询请求1拆分为的任务11至任务1n,即,每个任务被分配一个线程,进而利用linux内核的调度机制,把这些线程调度到不同cpu上。在该情况下,为了满足公平性,在如图1中琐事的情况下,可以对用户1提交的查询请求1以及用户2提交的查询请求2所对应的线程进行“分组”。利用linux内核提供的分组能力,通过给“分组”设置权重来使得用户提交的查询请求之间的优先级关系得到体现。另外,这些线程的分组关系需要内核根据当前接收到的查询请求来不停地进行调整,这会带来不小的开销。或者,现有技术中,也可以不为了新接收到的查询请求调整这些线程的分组,而是对每个接收到的查询请求都创建新的线程来处理,这样线程创建和销毁的开销会更大。
此外,另一种现有技术中,将可用的线程的数目进行固定,例如将线程数设置为等于CPU的核心的数量,然后把根据用户1的查询请求1拆分的任务11至1n分配给这些线程去处理。但是预先进行分发则可能导致这样固定数目的线程上排队的任务不均衡,造成“长尾”。
在这样的任务调度处理中,随着互联网技术的发展,涉及这样的查询请求的场景也越来越复杂,因此,对应的查询请求也越来越多样化复杂化,而处理器的计算资源,例如CPU的内核数目以及创建的线程数目是有限的。例如,在某一时刻,可能有大量用户提交大量的查询请求需要***进行处理,因此,需要同时对多个不同的查询请求进行上述的任务拆分并且对于每个请求的任务进行并发处理。而由于查询请求的多样性,例如,器可能具有不同的优先级并且也可能具有不同的复杂性。例如,优先级较高的查询请求拆分的任务可能简单,即需要分配较少的计算资源即可以完成,但是优先级较低的查询请求拆分的任务可能相对复杂,即需要分配大量的计算资源才能确保***的可交互性。因此,现有的查询***中需要在处理查询请求,尤其是在对查询请求的任务进行分配时需要兼顾公平性,即考虑不同查询请求的优先级,即重要性,又需要兼顾任务执行时的效率,即需要提供强大的并发性能,即时处理完任务以确保可交互性。因此,在现有技术中,已经出现了能够根据查询请求(query)的优先级,将查询请求(query)的各个任务(work item)所对应的线程进行分组,将不同的优先级对应不同的线程分组。例如,较高优先级的任务对应的线程分组中可以包含较多的线程,即确保更多资源向优先级较高的任务倾斜。即,根据分组所对应的任务的优先级,为各线程分组设置不同的权重。从而CPU内核能够根据权重值为线程分组中的线程所对应的任务分配CPU计算资源,以及实现线程与CPU内核间的调度和切换。但是这样的方案由于依赖于CPU内核来负责线程的分配、调度和切换,因此在处理大量的任务时,使用的大量的线程带来大量的分组、调度和切换的工作,将额外消耗大量的CPU资源,从而削弱并发性。此外,还出现了根据CPU内核数预先设置固定的工作线程数目,即,预先将CPU内核与线程绑定,从而无需CPU来进行线程的创建和调用以及切换等工作,避免了对线程进行调度和切换等带来的CPU资源消耗。但是,如上所述,由于查询请求的数目较大,使得任务(workitem)的数量远高于这样确定并固定下来的线程数,因此,在该方案中,通常,采用排队的任务调度策略不区分任务的优先级而是将新产生的任务预先分配给任务最少的线程进行排队。由于采取了预分配到队列来排队的调度方式节省了CPU来管理线程导致的资源开销,但是由于任务的分配是预先确定的,因此在分配时无法考虑任务的运行时间,并且如上所述,查询请求的多样性会导致任务的运行时间难以预先估计并且可能相差很多,因此这样的预先分配来进行排队的方式可能造成任务分发不均匀,例如造成“长尾”效果,即由于队列中的某一个任务的过长的运行时间使得该队列中排在后面的任务处于等待执行的状态而没有被执行,因此影响了其他查询请求的响应时间。此外,该方案由于预先分配任务时无法考虑查询请求的优先级,因此无法保证查询请求之间的公平性。
对此,本申请提出了在现有的任务调度方案中增加了执行体来作为任务到线程的中间承接体,并且相应地在线程上设置调度器,从而使用调度器来绑定线程,并且调度器可以执行对于执行体的调度,以间接地对任务进行调度安排。例如,如图1中所示,在两个用户发起两个查询请求的场景下,用户1可以发起查询请求1,并且用户2可以通过其终端或者通过互联网接入到云端服务器来发出查询请求2。本申请的任务调度***可以在接收到查询请求1之后,将其划分为n个任务11-1n,接下来可以将划分获得的这些任务直接一对一地分配给本申请的任务调度***所生成的执行体。例如,在本申请实施例中,可以如现有技术中那样,对于执行体按照优先级进行分组,从而当接收到的查询请求1具有较高的优先级时可以将任务11至任务1n分配给具有较高优先级的执行体分组1中,并且可以一一一对应的方式将任务11分配给分组1中的执行体1,将任务12分配给执行体2,以此类推,最终将任务1n分配给执行n。在分配到执行体1至n之后,可以由运行在线程1-p上的调度器1-p中的调度器根据线程的负载情况来进行调度。例如,在图1中所示的实施例中,可以由调度器1将执行体1调度到线程1上并且在对应的内核1上来执行,并且执行体2可以由调度器2调度到线程2上并且在对应的内核2上来执行,以此类推,分组1中的执行体1-n可以分别被不同的调度器来调度或者也可以由相同的调度器来调度,以在调度器所运行的线程上在对应的内核上执行。最终,当执行体1-n都已经由调度器各个调度来在对应的内核上完成了执行之后,其执行结果可以最终合并为响应1以输出给用户1。当然,在本申请实施例中,由于调度器1-p中的各调度器是根据其线程上的负载来对查询请求的任务11-1n进行调度执行,因此,在生成响应1之前,可以先将已经执行完的执行体的结果进行暂存,并且等待其他执行体的结果全部完成之后再一起合并生成响应1来发送给用户1。
在本申请实施例中,这些执行体与线程类似,其是由本申请的任务调度***预先或在接收到查询请求1时生成的,并且执行体可以运行在一个CPU上并且也可以根据任务调度***的指令在不同的CPU之间迁移。换言之,在本申请中,执行体可以用作作为任务请求的查询请求拆分出的多个任务与执行任务的线程之间的中间体,其可以不由***内核来调度,而是由本申请实施例的任务调度***来调度,或者可以视为一个超轻量级的线程。在本申请中,执行体在概念上类似于线程,每个执行体可以对应一个上下文,在同一时刻只能运行在一个cpu上,并且执行体也可以在不同的cpu之间进行迁移。但是与现有技术中的执行单元相反的是,本申请中的执行体并不受到操作***的内核的调度,而是由例如引擎的底层框架来进行调度,因此如上所述,本申请中的执行体可以相当于一个超轻量级的线程,对其进行切换、创建、销毁的开销都非常低,并且在一个执行体内部可以有任意多个输入/输出(IO)并发,即由引擎的底层框架封装的IO异步调用使得本申请的执行体在等待IO时并不会被阻塞,更不会阻塞工作线程。
因此,在将任务分配给各执行体之后可以形成执行体队列,即,将已经准备好可以执行的任务对应的执行体形成为一个执行体队列,以便于由在各线程上运行的调度器来进行调度。例如,与现有技术中使用操作***的内核进行调度,即将操作***的内核作为调度器的方式不同的是,在本申请实施例中,在每个工作线程上可以运行一个调度器,其可以为异步调度器,即本申请实施例中的调度器对于新分配的执行体不会立即对其执行调度处理,而是先将其加入执行体队列,并且根据执行情况再对执行体队列中的执行体进行调度,并且当执行体执行完当前任务进入阻塞状态时,其对应的调度器也不会随之进入阻塞状态,而是继续调度其他执行体,即调度器与其对应的执行体之间虽然具有对应关系,但是是以异步的方式执行调度,即执行体分配给调度器之后,调度器并不直接立即执行调度,而是等待适合的时机执行调度,并且执行体在执行完任务之后,调度器也不会与其同步进入阻塞状态,而是对其他执行体执行调度。例如,处于执行体队列中的执行体对应的任务都是已经准备就绪可以执行的任务,因此,可以通过运行在工作线程上的调度器来调度执行体队列中的执行体,从而实现各任务到工作线程的分配。即,在本申请中,通过将任务以一一对应的关系分配到执行体,并且在每个线程上运行各调度器,从而将任务与线程之间的分配实现为更灵活的调度器与执行体之间的调度。特别是,由于执行体是由本申请实施例的任务调度***来进行创建和管理,无需消耗***内核特别是CPU的计算资源,并且调度器与线程实现绑定,进而通过调度器对执行体的调度来随时保持线程上的任务的均衡,避免现有技术中由于任务的分配不合理导致的“长尾”现象。
当各线程处理完由调度器调度的执行体对应的任务之后,如图1中所示,可以根据执行结果生成对应的响应并发送给用户。
因此,本申请实施例的任务调度方案,能够通过提供将拆分后的任务分配给具有更高灵活性的执行体,并且利用运行在各线程上的调度器来对执行体进行调度,从而能够通过线程上的调度器来实现与任务所对应的执行体的分组及设置权重,以及使得由与线程绑定的调度器来执行对于具有更高灵活性的执行体的调度和切换。从而能够在避免消耗对进程进行调度的***内核的计算资源的同时,进一步确保了灵活性,实现了高并发性和公平性的平衡。
此外,根据本申请的实施例,用户可以使用应用有本申请实施例的任务调度方案的云服务器。例如,在为用户提供这样的云服务器上的云服务时,可以在用户的云服务器中根据接收到的大数据交互请求,使用本申请实施例的任务调度来对于接收到的大数据交互请求进行拆分,并且将拆分后的任务分配给本申请实施例中的执行体,从而与现有技术直接分配给线程或者使用调度器来执行排队相比,可以为用户的云服务器中的大数据计算提供更均衡的资源调度。因此,用户在使用应用有本申请实施例的任务调度方案的云服务器时,由于本申请实施例的任务调度方案能够更均衡地平衡并发性和公平性,因此能够为用户实现更高的计算资源利用率,从而用户可以使用与现有技术相比较低的计算资源配置来进行云计算处理,因此不仅提高了为用户提供的云服务的计算效率,而且节省了用户的云服务开销。
上述实施例是对本申请实施例的技术原理和示例性的应用框架的说明,下面通过多个实施例来进一步对本申请实施例具体技术方案进行详细描述。
实施例二
图2为本申请提供的任务调度方法一个实施例的流程图,该方法的执行主体可以为具有线程管理能力的各种终端或服务器设备,也可以为集成在这些设备上的装置或芯片。如图2所示,该任务分配计算方法包括如下步骤:
S201,根据接收到的任务请求生成多个任务。
在本申请实施例中,用户可以通过使用终端或通过互联网访问云服务器来提交自己的任务请求。例如,通常用户可以提交针对大数据的查询请求来从云服务器上存储的大量数据中检索自己想要的内容。因此,在本申请实施例中,在接收到任务请求之后,可以如图1中所示,根据该任务请求生成多个任务。换言之,在本申请实施例中,可以针对该任务请求拆分为可并发执行的多个任务,其分别执行该任务请求的内容的一部分。
S202,将任务请求的各任务分配给执行体并且形成执行体队列。
在本申请实施例中,当在步骤S201获得了用于并发执行的多个任务之后,可以将任务分配给利用本申请的任务调度***创建的执行体以便于分配给线程来执行处理。例如,在本申请实施例中,任务可以以一对一的方式分配给执行体,即如图1中所示,每个执行体与步骤S201中获取的任务一一对应。在本申请实施例中,也可以对执行体进行分组,从而每个分组可以对应于一个任务请求,即一个执行体组中的多个执行体分别对应于一个任务请求所拆分出来的多个任务,从而能够以组为一个单元来进行任务调度。此外,在步骤S202中,在任务分配给执行体之后,可以根据任务到执行体的分配状态,例如,是否已经分配完成,即任务已经准备就绪可以调度给线程来执行处理,来进一步形成执行体队列,从而该执行体队列中的执行体均为可以进行调度以分配给工作线程进行执行的执行体。
S203,使用调度器调用执行体队列中的执行体,以在该调度器的线程上执行与被调用的执行体对应的任务。
在本申请实施例中,在每个工作线程上可以运行一个调度器,其可以为异步调度器。例如,在步骤S202中形成的执行体队列中的执行体对应的任务都是已经准备就绪可以执行的任务,因此,可以通过运行在工作线程上的调度器来调度执行体队列中的执行体,从而实现各任务到工作线程的分配。
例如,在本申请中,在步骤S201中将任务以一一对应的关系分配到执行体,并且在步骤S203中通过在每个线程上运行的各调度器来对执行体进行调度,从而相应地对各任务进行调度,从而将任务与线程之间的分配实现为更灵活的调度器与执行体之间的调度。特别是,由于执行体是由本申请实施例的任务调度***来进行创建和管理,无需消耗***内核特别是CPU的计算资源,并且调度器与线程实现绑定,进而可以通过调度器对执行体的调度来随时保持线程上的任务的均衡,避免了现有技术中由于任务的分配不合理导致的“长尾”现象。
因此,本申请实施例的任务调度方案,能够通过提供将拆分后的任务分配给具有更高灵活性的执行体,并且利用运行在各线程上的调度器来对执行体进行调度,从而能够通过线程上的调度器来实现与任务所对应的执行体的分组及设置权重,以及使得由与线程绑定的调度器来执行对于具有更高灵活性的执行体的调度和切换。从而能够在避免消耗线程调度***资源的同时,进一步确保了灵活性,实现了高并发性和公平性的平衡。
实施例三
图3为本申请提供的任务调度方法另一个实施例的流程图,该方法的执行主体可以为具有线程管理能力的各种终端或服务器设备,也可以为集成在这些设备上的装置或芯片。如图3所示,该任务分配计算方法包括如下步骤:
S301,根据接收到的任务请求生成多个任务。
在本申请实施例中,用户可以通过使用终端或通过互联网访问云服务器来提交自己的任务请求。例如,通常用户可以提交针对大数据的查询请求来从云服务器上存储的大量数据中检索自己想要的内容。因此,在本申请实施例中,在接收到任务请求之后,可以如图1中所示,根据该任务请求生成多个任务。换言之,在本申请实施例中,可以针对该任务请求拆分为可并发执行的多个任务,其分别执行该任务请求的内容的一部分。
S302,将任务请求的各任务分配给执行体并且形成执行体队列。
在本申请实施例中,当在步骤S301获得了用于并发执行的多个任务之后,可以将任务分配给利用本申请的任务调度***创建的执行体以便于分配给线程来执行处理。例如,在本申请实施例中,任务可以以一对一的方式分配给执行体,即如图1中所示,每个执行体与步骤S301中获取的任务一一对应。在本申请实施例中,执行体队列中的每个执行体可以被分配有预定的时间配额,即,可以预先为执行体队列中的执行体设置或指定其允许被调度执行的时间长度,从而当其被线程调度来执行对应的任务时,可以根据该时间配额来确定该任务是否被执行超过预定的时间阈值。此外,在本申请实施例中,也可以对执行体进行分组,从而每个分组可以对应于一个任务请求,即一个执行体组中的多个执行体分别对应于一个任务请求所拆分出来的多个任务,从而能够以组为一个单元来进行任务调度。此外,在步骤S302中,在任务分配给执行体之后,可以根据任务到执行体的分配状态,例如,是否已经分配完成,即任务已经准备就绪可以调度给线程来执行处理,来进一步形成执行体队列,从而该执行体队列中的执行体均为可以进行调度以分配给工作线程进行执行的执行体。
在本申请实施例中,在每个工作线程上可以运行一个调度器,其可以为异步调度器。例如,在步骤S302中形成的执行体队列中的执行体对应的任务都是已经准备就绪可以执行的任务,因此,可以通过运行在工作线程上的调度器来调度执行体队列中的执行体,从而实现各任务到工作线程的分配。
S3031,使用线程上运行的调度器调用执行体队列中的执行体,以在被调用的执行体的时间配额内,在该调度器的线程上执行对应的任务。
例如,在本申请实施例中,在执行体被分配有时间配额的情况下,步骤S3031中调度器可以根据各种调度策略来调度执行体队列中的执行体来在该执行体对应的时间配额内执行与该执行体对应的任务。即,各线程的调度器可以在当前执行的任务超出时间配额时停止该任务的执行,并切换到另外的任务来执行,从而可以防止现有技术中由于在线程中执行的任务时间过长而导致的“长尾”。
S3032,判断任务的执行是否处于数据读写的第一状态。
S3033,当判断任务的执行处于第一状态时,使执行体进入阻塞状态,并且将执行体移出执行体队列。
在本申请实施例中,在任务的执行过程中,调度器可以进一步判断任务的执行是否处于数据读写的第一状态,例如,正在进行数据读写(IO)的状态。例如,调度器可以通过用于执行数据读写的存储器或者存储器的控制器的读写指令或者磁盘的当前工作状态的改变来判断是否处于正在进行数据读写的第一状态。当任务在进行数据读写时,通常对任务进行挂起以等待读写操作的完成,因此在本申请实施例中,当判断线程上执行的任务处于数据读写的状态时,可以使得该任务对应的执行体进入阻塞状态,即使得该执行体保持与当前任务的关联,并且可以将该执行体移出执行体队列,从而该执行体也不会被其他线程上的调度器进行调度。
S3034,判断数据读写是否完成。
S3035,当判断数据读写已完成时,使执行体退出阻塞状态。
在本申请实施例中,当被阻塞的执行体对应的任务的数据读写操作已经完成时,可以响应于该操作完成来使该执行体退出阻塞状态。例如,线程上的调度器在执行完当前队列中的所有执行体,即,当前队列已经没有剩余未被调度器调度的就绪执行体时,调度器可以判断处于阻塞状态的执行体对应的任务的IO操作是否已经完成。例如调度器可以利用epoll_wait来检查任务的异步IO事件,从而根据该epoll_wait的返回结果来对处于阻塞状态的执行进行对应的操作。例如,当返回结果指示IO事件已经结束,即,对应任务的数据读写操作已经完成时,调度器可以唤醒处于阻塞状态的执行体,即使得执行体退出阻塞状态。
因此,在步骤S3035中根据数据读写操作的完成而退出阻塞状态的执行体可以被重新加入到执行体队列中由调度器调度执行。
因此,本申请实施例的任务调度方案,能够通过提供将拆分后的任务分配给具有更高灵活性的执行体,并且利用运行在各线程上的调度器来对执行体进行调度,从而能够通过线程上的调度器来实现与任务所对应的执行体的分组及设置权重,以及使得由与线程绑定的调度器来执行对于具有更高灵活性的执行体的调度和切换。从而能够在避免消耗对进程进行调度的***内核的计算资源的同时,进一步确保了灵活性,实现了高并发性和公平性的平衡。
实施例四
图4为本申请提供的任务调度装置实施例的结构示意图,可用于执行如图2和图3所示的方法步骤。如图4所示,该任务调度装置可以包括:任务生成模块41、分配模块42和调度器43。
任务生成模块41可以用于根据接收到的任务请求生成多个任务。
在本申请实施例中,用户可以通过使用终端或通过互联网访问云服务器来提交自己的任务请求。例如,通常用户可以提交针对大数据的查询请求来从云服务器上存储的大量数据中检索自己想要的内容。因此,在本申请实施例中,在接收到任务请求之后,可以如图1中所示,根据该任务请求生成多个任务。换言之,在本申请实施例中,可以利用任务生成模块41针对该任务请求拆分为可并发执行的多个任务,其分别执行该任务请求的内容的一部分。
分配模块42可以用于将任务请求的各任务分配给执行体并且形成执行体队列。
在本申请实施例中,当任务生成模块41生成了用于并发执行的多个任务之后,分配模块42可以将任务分配给利用本申请的任务调度***创建的执行体以便于分配给线程来执行处理。例如,在本申请实施例中,分配模块42可以以一对一的方式将任务生成模块41生成的任务分配给执行体。例如,如图1中所示,通过分配模块42分配的任务可以与每个执行体一一对应。此外,分配模块42在将任务分配给执行体之后,可以根据任务到执行体的分配状态,例如,是否已经分配完成,即任务已经准备就绪可以调度给线程来执行处理,来进一步形成执行体队列,从而该执行体队列中的执行体均为可以进行调度以分配给工作线程进行执行的执行体。在本申请实施例中,执行体队列中的每个执行体可以被分配有预定的时间配额,即,可以预先为执行体队列中的执行体设置或指定其允许被调度执行的时间长度,从而当其被线程调度来执行对应的任务时,可以根据该时间配额来确定该任务是否被执行超过预定的时间阈值。此外,在本申请实施例中,也可以对执行体进行分组,从而每个分组可以对应于一个任务请求,即一个执行体组中的多个执行体分别对应于一个任务请求所拆分出来的多个任务,从而能够以组为一个单元来进行任务调度。
调度器43可以运行在线程上,并且用于调用执行体队列中的执行体,以在线程上执行与被调用的执行体对应的任务。
在本申请实施例中,调度器43可以运行在一个工作线程上,换言之,一个调度器43可以对应于一个工作线程,例如可以绑定到一个工作线程。在本申请实施例中,调度器43可以为异步调度器。例如,分配模块42形成的执行体队列中的执行体对应的任务都是已经准备就绪可以执行的任务,因此,可以通过运行在工作线程上的调度器43来调度执行体队列中的执行体,从而实现各任务到工作线程的分配。
例如,在本申请中,分配模块42可以将任务以一一对应的关系分配到执行体,并且通过在每个线程上运行的各调度器43来对执行体进行调度,从而相应地对各任务进行调度,从而将任务与线程之间的分配实现为更灵活的调度器与执行体之间的调度。特别是,由于执行体是由本申请实施例的任务调度***来进行创建和管理,无需消耗***内核特别是CPU的计算资源,并且调度器与线程实现绑定,进而可以通过调度器对执行体的调度来随时保持线程上的任务的均衡,避免了现有技术中由于任务的分配不合理导致的“长尾”现象。
此外,在本申请实施例中,在执行体被分配有时间配额的情况下,调度器43可以进一步根据各种调度策略来调度执行体队列中的执行体来在该执行体对应的时间配额内执行与该执行体对应的任务。即,各线程的调度器可以在当前执行的任务超出时间配额时停止该任务的执行,并切换到另外的任务来执行,从而可以防止现有技术中由于在线程中执行的任务时间过长而导致的“长尾”。
此外,在本申请实施例中,调度器43可以进一步用于判断任务的执行是否处于数据读写的第一状态,并且,当判断任务的执行处于第一状态时,使执行体进入阻塞状态,并且将执行体移出执行体队列。
在本申请实施例中,在任务的执行过程中,调度器43可以进一步判断任务的执行是否处于进行数据读写(IO)的状态。当任务在进行数据读写时,通常对任务进行挂起以等待读写操作的完成,因此在本申请实施例中,当判断线程上执行的任务处于数据读写的状态时,可以使得该任务对应的执行体进入阻塞状态,即使得该执行体保持与当前任务的关联,并且可以将该执行体移出执行体队列,从而该执行体也不会被其他线程上的调度器进行调度。
此外,在本申请实施例中,调度器43可以进一步用于判断数据读写是否完成,并且当判断数据读写已完成时,使执行体退出阻塞状态。
在本申请实施例中,当被阻塞的执行体对应的任务的数据读写操作已经完成时,可以响应于该操作完成来使该执行体退出阻塞状态。例如,线程上的调度器43在执行完当前队列中的所有执行体,即,当前队列已经没有剩余未被调度器43调度的就绪执行体时,调度器43可以判断处于阻塞状态的执行体对应的任务的IO操作是否已经完成。例如调度器43可以利用epoll_wait来检查任务的异步IO事件,从而根据该epoll_wait的返回结果来对处于阻塞状态的执行进行对应的操作。例如,当返回结果指示IO事件已经结束,即,对应任务的数据读写操作已经完成时,调度器可以唤醒处于阻塞状态的执行体,即使得执行体退出阻塞状态。
因此,根据数据读写操作的完成而退出阻塞状态的执行体可以被重新加入到执行体队列中由调度器43调度执行。
此外,根据本申请实施例,任务调度装置可以进一步包括负载均衡模块44,其可以用于根据多个调度器的负载情况来控制所述多个调度器分别调用所述执行体队列中的执行体。即,当调度器调度到各自线程上的执行体对应的任务已经被执行完或者由于当前执行的任务的复杂性导致执行事件较长而使得该调度器对应的线程的队列较长时,可以利用该负载均衡模块44来根据这样的负载情况控制调度器分别调用执行体的队列中的执行体来进行任务的灵活分配。
因此,本申请实施例的任务调度方案,能够通过提供将拆分后的任务分配给具有更高灵活性的执行体,并且利用运行在各线程上的调度器来对执行体进行调度,从而能够通过线程上的调度器来实现与任务所对应的执行体的分组及设置权重,以及使得由与线程绑定的调度器来执行对于具有更高灵活性的执行体的调度和切换。从而能够在避免消耗对进程进行调度的***内核的计算资源的同时,进一步确保了灵活性,实现了高并发性和公平性的平衡。
实施例五
以上描述了文本处理装置的内部功能和结构,该装置可实现为一种电子设备。图5为本申请提供的电子设备实施例的结构示意图。如图5所示,该电子设备包括存储器51和处理器52。
存储器51,用于存储程序。除上述程序之外,存储器51还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器51可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器52,不仅仅局限于中央处理器(CPU),还可能为图形处理器(GPU)、现场可编辑门阵列(FPGA)、嵌入式神经网络处理器(NPU)或人工智能(AI)芯片等处理芯片。处理器52,与存储器51耦合,执行存储器51所存储的程序,该程序运行时执行上述实施例二和三的任务调度方法。
进一步,如图5所示,电子设备还可以包括:通信组件53、电源组件54、音频组件55、显示器56等其它组件。图5中仅示意性给出部分组件,并不意味着电子设备只包括图5所示组件。
通信组件53被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,3G、4G或5G,或它们的组合。在一个示例性实施例中,通信组件53经由广播信道接收来自外部广播管理***的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件53还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
电源组件54,为电子设备的各种组件提供电力。电源组件54可以包括电源管理***,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。
音频组件55被配置为输出和/或输入音频信号。例如,音频组件55包括一个麦克风(MIC),当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器51或经由通信组件53发送。在一些实施例中,音频组件55还包括一个扬声器,用于输出音频信号。
显示器56包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (15)
1.一种任务调度方法,包括:
根据接收到的任务请求生成多个任务;
将所述任务请求的各任务分配给执行体并且形成执行体队列,其中,所述执行体与被分配的任务具有一一对应的关系;
使用调度器调用所述执行体队列中的执行体,以在该调度器的线程上执行与被调用的执行体对应的任务。
2.根据权利要求1所述的任务调度方法,其中,所述执行体队列中的每个执行体被分配有预定的时间配额,并且,
所述使用线程上运行的调度器调用所述执行体队列中的执行体,以在该调度器的线程上执行与被调用的执行体对应的任务,包括:
使用线程上运行的调度器调用所述执行体队列中的执行体,以在被调用的执行体的时间配额内,在该调度器的线程上执行对应的任务。
3.根据权利要求1所述的任务调度方法,其中,所述使用线程上运行的调度器调用所述执行体队列中的执行体,包括:
判断所述任务的执行是否处于数据读写的第一状态;
当判断所述任务的执行处于所述第一状态时,使所述执行体进入阻塞状态,并且将所述执行体移出所述执行体队列。
4.根据权利要求3所述的任务调度方法,其中,所述使用线程上运行的调度器调用所述执行体队列中的执行体,进一步包括:
判断所述数据读写是否完成;
当判断所述数据读写已完成时,使所述执行体退出所述阻塞状态。
5.根据权利要求1所述的任务调度方法,其中,所述使用线程上运行的调度器调用所述执行体队列中的执行体,包括:
使用多个调度器根据所述多个调度器的负载情况来分别调用所述执行体队列中的执行体。
6.根据权利要求1所述的任务调度方法,其中,所述任务运行在操作***中,并且
所述执行体由线程上的调度器来进行调度,并且不受到所述操作***的内核的调度控制;
所述执行体根据所述调度器的调度在不同处理器之间迁移。
7.根据权利要求3所述的任务调度方法,其中,当所述执行体进入阻塞状态时,与所述执行体对应的调度器调用所述执行体队列中的其他执行体,以在该调度器的线程上执行对应的任务。
8.根据权利要求4所述的任务调度方法,其中,所述当判断所述数据读写已完成时,使所述执行体退出所述阻塞状态进一步包括:
将退出阻塞状态的执行体由所述调度器重新调用。
9.根据权利要求4所述的任务调度方法,其中,所述当判断所述数据读写已完成时,使所述执行体退出所述阻塞状态进一步包括:
由所述调度器向处于所述阻塞状态的所述执行体发送唤醒指令,以使所述执行体退出所述阻塞状态。
10.一种任务调度方法,包括:
确定执行体队列中各执行体所分配的任务的请求时间,其中,所述执行体与被分配的任务具有一一对应的关系;
当所述请求时间超过第一时间阈值时,向所述请求时间所对应的任务的用户发送超时信息;
接收所述用户针对所述超时信息发送的操作指令;
根据所述操作指令使用调度器调用所述执行体队列中对应的执行体以在该调度器的线程上执行与被调用的执行体对应的任务。
11.一种任务调度方法,所述任务调度方法应用于Linux操作***内核以外的代码环境中,所述方法包括:
根据接收到的任务请求生成多个任务;
将所述任务请求的各任务分配给由所述内核以外的底层框架调度的执行体并且形成执行体队列,其中,所述执行体与被分配的任务具有一一对应的关系;
使用所述底层框架调用所述执行体队列中的执行体,以在所述底层框架的线程上执行与被调用的执行体对应的任务。
12.一种任务调度装置,包括:
任务生成模块,用于根据接收到的任务请求生成多个任务;
分配模块,用于将所接收到的各任务分配给执行体并且形成执行体队列,其中,所述执行体与被分配的任务具有一一对应的关系;
调度器,所述调度器用于调用所述执行体队列中的执行体,以在所述调度器的线程上执行与被调用的执行体对应的任务。
13.根据权利要求12所述的任务调度装置,其中,所述执行体队列中的每个执行体被分配有预定的时间配额,并且,
所述调度器用于调用所述执行体队列中的执行体,以在被调用的执行体的时间配额内在该调度器的线程上执行对应的任务。
14.一种电子设备,其特征在于,包括:
存储器,用于存储程序;
处理器,用于运行所述存储器中存储的所述程序,所述程序运行时执行如权利要求1至11中任一所述的任务调度方法。
15.一种计算机可读存储介质,其上存储有可被处理器执行的计算机程序,其中,该程序被处理器执行时实现如权利要求1至11中任一所述的任务调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010681454.5A CN113946410A (zh) | 2020-07-15 | 2020-07-15 | 任务调度方法和装置、电子设备以及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010681454.5A CN113946410A (zh) | 2020-07-15 | 2020-07-15 | 任务调度方法和装置、电子设备以及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113946410A true CN113946410A (zh) | 2022-01-18 |
Family
ID=79325893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010681454.5A Pending CN113946410A (zh) | 2020-07-15 | 2020-07-15 | 任务调度方法和装置、电子设备以及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113946410A (zh) |
-
2020
- 2020-07-15 CN CN202010681454.5A patent/CN113946410A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10133598B2 (en) | Systems and methods of using a hypervisor to assign virtual processor priority based on task priority and to schedule virtual processors for guest operating systems | |
US9201693B2 (en) | Quota-based resource management | |
US10754706B1 (en) | Task scheduling for multiprocessor systems | |
CN110489213B (zh) | 一种任务处理方法及处理装置、计算机*** | |
US8918784B1 (en) | Providing service quality levels through CPU scheduling | |
JP5367816B2 (ja) | オペレーションの保護モードスケジューリング | |
US20130346985A1 (en) | Managing use of a field programmable gate array by multiple processes in an operating system | |
JP2014219977A (ja) | 動的仮想マシンサイジング | |
CN111597042A (zh) | 业务线程运行方法、装置、存储介质及电子设备 | |
KR102052964B1 (ko) | 컴퓨팅 스케줄링 방법 및 시스템 | |
CN113032152B (zh) | 用于深度学习框架的调度方法、调度装置、电子设备、存储介质和程序产品 | |
CN113553190B (zh) | 计算集群***、调度方法、设备及存储介质 | |
KR20150114444A (ko) | 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 | |
CN115167996A (zh) | 调度方法及装置、芯片、电子设备及存储介质 | |
CN113495780A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
CN111597044A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
US8640131B2 (en) | Demand-based processor cycle allocation subsequent to equal group-based processor cycle distribution | |
CN114968567A (zh) | 用于分配计算节点的计算资源的方法、装置和介质 | |
CN113495787A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
Kang et al. | Priority-driven spatial resource sharing scheduling for embedded graphics processing units | |
CN113946410A (zh) | 任务调度方法和装置、电子设备以及计算机可读存储介质 | |
Singh et al. | Private cloud scheduling with SJF, bound waiting, priority and load balancing | |
CN114968500A (zh) | 一种任务调度方法、装置、设备及存储介质 | |
US20230393889A1 (en) | Multi-core processor, multi-core processor processing method, and related device | |
KR20110099617A (ko) | 가상화 지원 단말 플랫폼을 위한 가상머신 관리장치 및 방법 |
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 |