本技术实施例涉及计算机,特别涉及一种任务执行方法、装置、系统及存储介质。
背景技术:
1、随着计算机技术的飞速发展,目前在执行任务时,通常可以通过多个线程执行多个任务。相关技术中,采用人工配置的方式将多个任务分配给多个线程,由多个线程分别执行各自分配到的任务,当某个线程将分配到的任务执行完成后,重新为该线程分配新的任务,由于该方法依赖于人工配置,导致任务的执行效率较低。
技术实现思路
1、本技术实施例提供了一种任务执行方法、装置、系统及存储介质,能够提高任务的执行效率。所述技术方案如下:
2、一方面,提供了一种任务执行方法,由任务执行系统执行,所述任务执行系统运行有多个线程,每个所述线程具有对应的局部任务队列;所述方法包括:
3、通过第一线程,从除了所述第一线程之外的其他线程的局部任务队列中查找目标任务,所述目标任务是指满足执行条件但还未执行的任务;
4、在从其他线程的局部任务队列中查找到所述目标任务的情况下,通过所述第一线程,抢占并执行查找到的所述目标任务;
5、其中,所述第一线程为所述多个线程中的任一线程。
6、可选地,所述通过所述第一线程,从所述多个线程的局部任务队列中查找所述目标任务之后,所述方法还包括:
7、在从所述多个线程的局部任务队列中未查找到所述目标任务的情况下,将所述第一线程从所述第一状态切换为所述挂起状态。
8、可选地,每个所述任务具有依赖数量,所述任务的依赖数量是指所述任务所依赖的、且未执行的任务的数量;
9、所述通过所述第一线程,将未执行且所依赖的任务已执行完成的任务添加至所述第一线程的局部任务队列中,包括:
10、通过所述第一线程,将所述依赖数量等于0的任务添加至所述第一线程的局部任务队列中。
11、可选地,所述目标任务通过调用所述语言封装接口对所述原始任务中的函数和参数添加引用得到,通过所述第一线程,执行查找到的所述目标任务,包括:
12、通过所述第一线程,根据所述引用确定所述函数和所述参数,调用所述函数对所述参数进行处理。
13、另一方面,提供了一种任务执行装置,配置于任务执行系统,所述任务执行系统运行有多个线程,每个所述线程具有对应的局部任务队列;所述装置包括:
14、查找模块,用于通过第一线程,从除了所述第一线程之外的其他线程的局部任务队列中查找目标任务,所述目标任务是指满足执行条件但还未执行的任务;
15、执行模块,用于在从其他线程的局部任务队列中查找到所述目标任务的情况下,通过所述第一线程,抢占并执行查找到的所述目标任务;
16、其中,所述第一线程为所述多个线程中的任一线程。
17、可选地,所述查找模块,用于:
18、通过所述第一线程,从所述第一线程的局部任务队列中查找所述目标任务;
19、在从所述第一线程的局部任务队列中未查找到所述目标任务的情况下,通过所述第一线程,从其他线程的局部任务队列中查找所述目标任务。
20、可选地,所述执行条件包括所依赖的任务已执行完成或者不依赖于其他任务,所述局部任务队列用于存储未执行且所依赖的任务已执行完成的任务,全局任务队列用于存储未执行且不依赖于其他任务的任务;
21、所述查找模块,还用于在从其他线程的局部任务队列中未查找到所述目标任务的情况下,通过所述第一线程,从所述全局任务队列中查找所述目标任务;
22、所述执行模块,还用于在从所述全局任务队列中查找到所述目标任务的情况下,通过所述第一线程,抢占并执行查找到的所述目标任务。
23、可选地,所述查找模块,用于在从其他线程的局部任务队列中查找所述目标任务的次数达到目标阈值,且仍未查找到所述目标任务的情况下,通过所述第一线程,从所述全局任务队列中查找所述目标任务。
24、可选地,所述装置还包括:
25、状态确定模块,用于在从所述全局任务队列中未查找到所述目标任务的情况下,通过所述第一线程,确定其他线程当前的状态;
26、状态切换模块,用于如果除了所述第一线程之外还存在处于第一状态的第二线程,则将所述第一线程从所述第一状态切换为挂起状态,所述第一状态是指正在查找所述目标任务的状态。
27、可选地,所述查找模块,还用于如果除了所述第一线程之外不存在处于所述第一状态的任一线程,但存在处于第二状态的第三线程,则通过所述第一线程,从所述第三线程的局部任务队列中查找所述目标任务,所述第二状态是指正在执行任务的状态;
28、所述执行模块,还用于在从所述第三线程的局部任务队列中查找到所述目标任务的情况下,通过所述第一线程,抢占并执行查找到的所述目标任务。
29、可选地,所述查找模块,还用于如果除了所述第一线程之外不存在处于所述第一状态的任一线程,且不存在处于第二状态的任一线程,则通过所述第一线程,从所述多个线程的局部任务队列中查找所述目标任务,所述第二状态是指正在执行任务的状态;
30、所述执行模块,还用于在从所述多个线程的局部任务队列中查找到所述目标任务的情况下,通过所述第一线程,抢占并执行查找到的所述目标任务。
31、可选地,所述状态切换模块,还用于在从所述多个线程的局部任务队列中未查找到所述目标任务的情况下,将所述第一线程从所述第一状态切换为所述挂起状态。
32、可选地,所述装置还包括:
33、创建模块,用于创建任务集合,所述任务集合包括多个任务,所述任务集合中的每个任务与所述任务集合中其他的至少一个任务之间存在依赖关系;
34、第一添加模块,用于将未执行且不依赖于其他任务的任务添加至所述全局任务队列中;
35、第二添加模块,用于通过所述第一线程,将未执行且所依赖的任务已执行完成的任务添加至所述第一线程的局部任务队列中。
36、可选地,每个所述任务具有依赖数量,所述任务的依赖数量是指所述任务所依赖的、且未执行的任务的数量;
37、所述第二添加模块,用于通过所述第一线程,将所述依赖数量等于0的任务添加至所述第一线程的局部任务队列中。
38、可选地,每个所述任务具有依赖数量,所述任务的依赖数量是指所述任务所依赖的、且未执行的任务的数量;所述装置还包括数量更新模块,所述数量更新模块,用于:
39、通过所述第一线程,将第一目标任务执行完成之后,从所述任务集合中确定所述第一目标任务的后续任务,所述第一目标任务的后续任务是指依赖于所述第一目标任务的任务,所述第一目标任务为任一目标任务;
40、通过所述第一线程,将所述第一目标任务的后续任务的依赖数量减1。
41、可选地,所述装置还包括:
42、线程确定模块,用于在从其他线程的局部任务队列中查找到所述目标任务的情况下,通过所述第一线程,在所述多个线程中确定处于挂起状态的第四线程;
43、切换通知模块,用于通过所述第一线程,通知所述第四线程从所述挂起状态切换为第一状态,所述第一状态是指正在查找所述目标任务的状态。
44、可选地,所述第一线程支持第一语言,所述目标任务基于所述第一语言创建得到,或者,所述目标任务通过调用语言封装接口对原始任务进行封装得到,所述原始任务基于第二语言创建得到,所述语言封装接口用于将基于所述第二语言创建的任务封装为支持第一语言的线程可执行的任务。
45、可选地,所述目标任务通过调用所述语言封装接口对所述原始任务中的函数和参数添加引用得到,所述执行模块,用于通过所述第一线程,根据所述引用确定所述函数和所述参数,调用所述函数对所述参数进行处理。
46、另一方面,提供了一种任务执行系统,所述任务执行系统包括处理器和存储器,所述存储器中存储有至少一条计算机程序,所述至少一条计算机程序由所述处理器加载并执行以实现如上述方面所述的任务执行方法所执行的操作。
47、另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述至少一条计算机程序由处理器加载并执行以实现如上述方面所述的任务执行方法所执行的操作。
48、另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序由处理器加载并执行,以实现如上述方面所述的任务执行方法所执行的操作。
49、本技术实施例提供了一种任务执行系统,该任务执行系统中的每个线程具有各自的局部任务队列,且任一线程具有对其他线程的局部任务队列进行访问的权限,该任务执行系统中的任一线程均可从其他线程的局部任务队列中查找满足执行条件但还未执行的任务,因此任一线程能够抢占并执行其他线程的局部任务队列中的任务,从而及时执行其他线程没有来得及执行的任务,实现了对任务的自动调度,有利于提高任务的吞吐量,进而提高了任务的执行效率。