一种单线程多任务执行方法、装置、设备及介质与流程

文档序号:32855355发布日期:2023-01-06 23:50阅读:27来源:国知局
一种单线程多任务执行方法、装置、设备及介质与流程

1.本发明涉及计算机技术领域,特别涉及一种单线程多任务执行方法、装置、设备及介质。


背景技术:

2.在当前移动互联网时代,主流操作系统大都利用多线程模型的方式来实现多任务的处理。通常设备中会有多个线程竞争执行多种任务,此时各个线程会轮流获得cpu的使用权,分别执行各自的任务,以此实现宏观上的并发。但这种线程之间的切换,涉及内核态和用户态的转换,造成的时间开销比较大,对设备性能有很大影响。这种时间开销在一些具有高响应、低延迟的多并发场景中是无法适应的。
3.纤程是一种轻量级的线程,它是一种用户线程,让应用程序可以独立决定自己的线程要如何运作。应用可以在一个线程中创建多个纤程,并进行彼此间的调度。所述纤程由于消耗小、切换快,一般系统可以同时发起超过上万的纤程,解决线程切换的开销问题。但是纤程的执行一般都为同步的,对于拥有大量不同类型任务的系统来说,每一个任务都需要发起一个纤程,这样造成的等待时间开销同样不少,尤其是对存储这样的智能设备来说,高性能的存储设备每秒钟需要响应上万的io设备,而每个io设备在不同的阶段,又需要发起不同的处理任务;即需要大量并且及时的响应任务,所以这里只靠同步的纤程是不可行的。


技术实现要素:

4.为了克服上述技术缺陷,本发明的目的在于提供一种单线程多任务执行方法、装置、设备及介质,本发明所述单线程多任务执行方法应用于单线程多任务执行系统,所述单线程多任务执行系统包括任务单元、工作线程、任务池,所述任务单元包括任务状态子单元、回调函数子单元、执行次数子单元;所述任务池包括待执行池、等待池,所述方法包括:在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值;对所述待执行任务的任务状态和回调函数进行初始化;对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。本发明相比多线程技术,更简单易实现,且可以满足高性能设备的要求;同时能够代替纤程,满足高响应低延迟设备的高性能要求,避免目前纤程同步机制带来的损耗。
5.本发明实施例提供的具体技术方案如下:
6.第一方面,提供了一种单线程多任务执行方法,所述单线程多任务执行方法应用于单线程多任务执行系统,所述单线程多任务执行系统包括任务单元、工作线程、任务池,所述任务单元包括任务状态子单元、回调函数子单元、执行次数子单元;所述任务池包括待执行池、等待池,所述方法包括:
7.在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈
值;
8.对所述待执行任务的任务状态和回调函数进行初始化;
9.对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;
10.所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。
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.若是,则重新调度所述待执行任务,并将调度后的待执行任务放入等待池中;若否,则执行所述待执行任务的回调函数。
38.第二方面,提供了一种单线程多任务执行装置,所述装置包括:
39.创建模块,用于在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值;
40.初始化模块,用于对所述待执行任务的任务状态和回调函数进行初始化;
41.调度模块,用于对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;
42.执行模块,用于获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。
43.第三方面,提供了一种计算机设备,所述设备包括:
44.存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现如第一方面任一所述的单线程多任务执行方法的步骤。
45.第四方面,提供了一种计算机存储介质,所述介质包括:
46.其上存储有计算机程序,该计算机程序被存储器执行时实现第一方面任一所述的单线程多任务执行方法的步骤。
47.与现有技术相比,本发明实施例提供的技术方案所述方法包括:在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值;对所述待执行任务的任务状态和回调函数进行初始化;对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。本发明相比多线程技术,更简单易实现,且可以满足高性能设备的要求,提高了任务的响应速度;同时能够代替纤程,满足高响应低延迟设备的高性能要求,避免目前纤程同步机制带来的损耗。
48.本发明实施例提供的技术方案在完成多任务功能要求快速达成的前提下,也保证了程序的稳定和健壮性,没有多线程并发的风险和消耗;采用该方法,编程人员可以在不进行多线程编程的情况下,按照上述方法的技术方案即可实现多任务处理的目的。
附图说明
49.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
50.图1为本发明实施例一提供的单线程多任务执行方法的流程图;
51.图2为本发明实施例一提供的任务单元的结构图;
52.图3为本发明实施例一提供的任务池的结构图;
53.图4为本发明实施例二提供的单线程多任务执行方法的第一流程图;
54.图5为本发明实施例二提供的单线程多任务执行方法的第二流程图;
55.图6为本发明实施例二提供的单线程多任务执行方法的第三流程图;
56.图7为本发明实施例三提供的单线程多任务执行装置的结构图;
57.图8为本发明实施例五提供的可被用于实施本技术中所述的各个实施例的示例性系统。
具体实施方式
58.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
59.需要说明的是,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
60.此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
61.实施例一
62.本发明实施例提供了一种单线程多任务执行方法,如图1所示,所述单线程多任务执行方法应用于单线程多任务执行系统,所述单线程多任务执行系统包括任务单元、工作线程、任务池,如图2所示,所述任务单元包括任务状态子单元、回调函数子单元、执行次数子单元;如图3所示,所述任务池包括待执行池、等待池,所述方法包括:
63.在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值;
64.对所述待执行任务的任务状态和回调函数进行初始化;
65.对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;
66.所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。
67.具体地,本发明提供了一种单线程多任务执行方法,该方法适用于拥有大量不同类型的任务,同时有高性能要求的设备,比如存储设备等。
68.所述单线程多任务执行方法应用于单线程多任务执行系统,所述单线程多任务执行系统包括任务单元、工作线程、任务池。
69.任务由系统发起,即需要执行的任务,如图2所示,所述任务单元包括任务状态子单元、回调函数子单元、执行次数子单元。其中,所述回调函数子单元记录了任务需要执行的回调函数,是任务的主体。
70.另外,任务状态和重复执行次数都是任务的属性,也可以有其他形式,此处只展现一种实施例。所述任务状态用来记录任务在调度过程中的状态。在此实施例中所述任务状态值是一个指针,不仅可以用来进行任务的调度,还可以标识任务的状态。
71.所述执行次数子单元记录任务需要执行的次数。因为任务在异步调度执行的情况
下有可能被系统重复调用,当重复发起同一个任务的情况发生时,只需要将任务的执行次数子单元记录的执行次数加1次,而不需要重新再进行任务的调度,保证了系统代码的健壮性。
72.如图3所示,所述任务池是指存放任务的队列。所述任务池包括待执行池和等待池。所述待执行池用来存放调度中即将执行的任务,可以用便于存放数据的数据结构实现,此实施例中所述待执行池是一个循环队列,便于存放数据的数据结构;但是所述待执行池一般存放的任务数量都是有限的,因此这里引入等待池,所述等待池的作用是:在待执行池放满以后,将任务放入所述等待池中。这里等待池的实现需要使用可以无限存放数据的数据结构,同时,此实施例中,等待池是一个单链表。
73.所述工作线程是指实际上执行任务的线程;所述任务池绑定在工作线程上,所述工作线程通过访问任务池来执行其中的任务。
74.本发明实施例提供的技术方案带来的有益效果是:
75.本发明实施例提供的技术方案相比多线程技术,更简单易实现,且可以满足高性能设备的要求,提高了任务的响应速度;同时能够代替纤程,满足高响应低延迟设备的高性能要求,避免目前纤程同步机制带来的损耗。
76.本发明实施例提供的技术方案在完成多任务功能要求快速达成的前提下,也保证了程序的稳定和健壮性,没有多线程并发的风险和消耗;采用该方法,编程人员可以在不进行多线程编程的情况下,按照上述方法的技术方案即可实现多任务处理的目的。
77.实施例二
78.本发明实施例提供了一种单线程多任务执行方法,如图1所示,所述单线程多任务执行方法应用于单线程多任务执行系统,所述单线程多任务执行系统包括任务单元、工作线程、任务池,所述任务单元包括任务状态子单元、回调函数子单元、执行次数子单元;所述任务池包括待执行池、等待池,所述方法包括:
79.步骤s01,在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值。
80.具体地,在所述任务单元创建待执行任务,将状态指针指向空位指针null,设置所述待执行任务的任务状态值为第一阈值,此时无法进行任务的调度,所述任务处于一个被保护的状态;所述回调函数子单元存放有待执行任务需要执行的回调函数;当所述待执行任务的执行次数单元中记录的重复执行次数为0,表示此任务不需要重复执行。
81.其中,所述第一阈值为1。
82.步骤s02,对所述待执行任务的任务状态和回调函数进行初始化。
83.具体地,通过将待执行任务的状态指针指向任务本身,设置所述待执行任务的任务状态值为第二阈值,即此状态下所述待执行任务就可以进行调度了;对所述待执行任务的回调函数进行初始化,可以在所述回调函数子单元中更新所述待执行任务的回调函数。
84.其中,所述第二阈值为2。
85.步骤s02还包括:
86.步骤s021,判断是否需要对所述待执行任务的任务状态进行初始化;
87.若是,则设置所述待执行任务的任务状态值为第二阈值;若否,则对所述回调函数子单元中是否已经导入所述待执行任务的回调函数进行判断;
88.所述对所述回调函数子单元中是否已经导入所述待执行任务的回调函数进行判断,包括:
89.判断所述回调函数子单元中是否已经导入所述待执行任务的回调函数;
90.若是,则在所述回调函数子单元中更新所述待执行任务的回调函数;若否,则结束流程。
91.具体地,如图4所示,a.首先判断是否需要对所述待执行任务的任务状态进行初始化,若需要则继续执行步骤b;若不需要则跳至步骤c;
92.b.将状态指针指向任务自身,设置所述待执行任务的任务状态值为第二阈值,即此状态下所述待执行任务就可以进行调度;
93.c.判断所述回调函数子单元中是否已经导入所述待执行任务的回调函数,若导入了则继续执行步骤d;若未导入则结束流程。
94.d.在所述回调函数子单元中更新所述待执行任务的回调函数。
95.步骤s03,对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中。
96.步骤s03还包括:
97.步骤s031,判断所述待执行任务的任务状态值是否为第二阈值;
98.若是,则对所述待执行池中是否有空位进行判断;若否,则对所述待执行任务的任务状态值是否为第三阈值进行判断;
99.所述对所述待执行池中是否有空位进行判断,包括:
100.判断所述待执行池中是否有空位;
101.若是,则将所述待执行任务放入所述待执行池中,并设置所述待执行任务的任务状态值为第三阈值;若否,则将所述待执行任务放入所述等待池中。
102.步骤s032,判断所述待执行任务的任务状态值是否为第三阈值;
103.若是,则在所述执行次数子单元中增加一次所述待执行任务需要执行的次数;若否,则结束流程。
104.具体地,如图5所示,a.判断所述待执行任务的任务状态值是否为第二阈值,即处于可以调度的状态;若是则跳转至步骤d;若否则执行步骤b;
105.b.判断所述待执行任务的任务状态值是否为第三阈值,若是则继续执行步骤c;若否则结束流程;
106.c.将待执行任务的重复执行次数加1次,调度结束。
107.d.判断待执行池中是否还有空位;若还有空位则进行步骤e;若没有空位则进行步骤f;
108.e.将待执行任务放入待执行池中,此实施例中即是将待执行任务放入循环队列中的队尾,同时将待执行任务的状态指针指向循环队列对应位置,设置所述待执行任务的任务状态值为第三阈值,意味着此待执行任务已在队列中。
109.f.将待执行任务放入等待池中,此实施例中即是将待执行任务插入单链表的队尾。
110.其中,所述第三阈值为3。
111.步骤s04,所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池
中的待执行任务。
112.具体地,所述工作线程不断的访问任务池,获取所述任务池中的待执行任务,执行其中的任务。
113.步骤s04还包括:
114.步骤s041,判断所述待执行池中是否有待执行任务;
115.若是,则获取所述待执行池中的待执行任务,重新设置所述待执行任务的任务状态值为第二阈值,并执行所述待执行任务的回调函数,对所述待执行任务的执行次数是否为第四阈值进行判断;若否,则结束流程。
116.步骤s042,判断所述待执行任务的执行次数是否为第四阈值;
117.若是,则对所述等待池是否为空池进行判断;若否,则对所述待执行任务的执行时间是否大于第五阈值进行判断;
118.所述对所述等待池是否为空池进行判断,包括:
119.判断所述等待池是否为空池;
120.若是,则结束当前执行所述待执行任务的流程,并继续判断所述待执行池中是否有待执行任务;若否,则将所述等待池中的待执行任务放入所述待执行池中,并循环执行所述待执行池中的待执行任务。
121.步骤s043,判断所述待执行任务的执行时间是否大于第五阈值;
122.若是,则重新调度所述待执行任务,并将调度后的待执行任务放入等待池中;若否,则执行所述待执行任务的回调函数。
123.具体地,如图6所示,a.首先判断待执行池中是否有任务需要执行,若是则继续执行,若否则结束;
124.b.从待执行池中取出一个待执行任务,在此实施例中即是从循环队列中取出位于队头的待执行任务;
125.c.将任务的状态指针指向任务自身,任务状态值重新变为2,表示此任务可以再次进行调度;
126.d.执行所述待执行任务的回调函数;
127.e.判断所述待执行任务的执行次数是否为0,若不为0则执行步骤f;若为0则执行步骤g;
128.f.判断此待执行任务的执行时间是否过长,即判断所述待执行任务的执行时间是否大于第五阈值,若过长则重新调度所述待执行任务,并将调度后的待执行任务放入等待池中,等待下次执行,防止执行过程堵塞;若未超过执行时间限制即第五阈值,则跳转回步骤d;
129.g.判断所述等待池是否为空池,若为空则结束当前执行所述待执行任务的流程,跳转回步骤a,进行循环;若等待池不为空,则将所述等待池中的待执行任务放入所述待执行池中,在此实施例中即是将单链表中队头的任务取出,放入循环队列中的队尾处,完成后跳转回步骤a,进行循环。
130.其中,所述第四阈值为0;所述第五阈值可综合任务池中任务的数量、平均执行时间、任务池的繁忙程度以及等待池中任务数量的上限等因素自行决定。例如:每个待执行任务的平均执行时间为1毫秒,任务池的等待池的任务数量上限为64个,那这里执行时间的第
五阈值就可定为64毫秒。
131.本发明在工作线程上设立任务池(所述任务池包括但不限于循环队列,单链表等数据结构)。本发明中任务经过创建模块、初始化模块、调度模块这三个模块完成任务的生产,由工作线程调用执行模块完成任务的消费。
132.本发明实施例提供的单线程多任务执行的方法在不脱离本发明技术方案的前提下,还可以做出若干改进以及优化,这些改进与优化也应当视为本发明的保护范围。
133.本发明实施例提供的技术方案带来的有益效果是:
134.本发明实施例提供的技术方案相比多线程技术,更简单易实现,且可以满足高性能设备的要求,提高了任务的响应速度;同时能够代替纤程,满足高响应低延迟设备的高性能要求,避免目前纤程同步机制带来的损耗。
135.本发明实施例提供的技术方案在完成多任务功能要求快速达成的前提下,也保证了程序的稳定和健壮性,没有多线程并发的风险和消耗;采用该方法,编程人员可以在不进行多线程编程的情况下,按照上述方法的技术方案即可实现多任务处理的目的。
136.实施例三
137.本发明提供了一种单线程多任务执行装置,如图7所示,所述装置包括创建模块、初始化模块、调度模块、执行模块。
138.其中,所述多任务的调度执行需要有任务的生产者和消费者。这里由系统调用创建模块、初始化模块、调度模块完成任务的生产;由工作线程调用执行模块完成任务的消费。
139.在本实施例中,创建模块,用于在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值;
140.初始化模块,用于对所述待执行任务的任务状态和回调函数进行初始化;
141.调度模块,用于对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;
142.执行模块,用于获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。
143.进一步地,初始化模块,用于判断是否需要对所述待执行任务的任务状态进行初始化;
144.若是,则设置所述待执行任务的任务状态值为第二阈值;若否,则对所述回调函数子单元中是否已经导入所述待执行任务的回调函数进行判断;
145.所述对所述回调函数子单元中是否已经导入所述待执行任务的回调函数进行判断,包括:
146.判断所述回调函数子单元中是否已经导入所述待执行任务的回调函数;
147.若是,则在所述回调函数子单元中更新所述待执行任务的回调函数;若否,则结束流程。
148.进一步地,调度模块,还用于判断所述待执行任务的任务状态值是否为第二阈值;
149.若是,则对所述待执行池中是否有空位进行判断;若否,则对所述待执行任务的任务状态值是否为第三阈值进行判断;
150.所述对所述待执行池中是否有空位进行判断,包括:
151.判断所述待执行池中是否有空位;
152.若是,则将所述待执行任务放入所述待执行池中,并设置所述待执行任务的任务状态值为第三阈值;若否,则将所述待执行任务放入所述等待池中。
153.进一步地,调度模块,用于判断所述待执行任务的任务状态值是否为第三阈值;
154.若是,则在所述执行次数子单元中增加一次所述待执行任务需要执行的次数;若否,则结束流程。
155.进一步地,执行模块,还用于判断所述待执行池中是否有待执行任务;
156.若是,则获取所述待执行池中的待执行任务,重新设置所述待执行任务的任务状态值为第二阈值,并执行所述待执行任务的回调函数,对所述待执行任务的执行次数是否为第四阈值进行判断;若否,则结束流程。
157.进一步地,执行模块,还用于判断所述待执行任务的执行次数是否为第四阈值;
158.若是,则对所述等待池是否为空池进行判断;若否,则对所述待执行任务的执行时间是否大于第五阈值进行判断;
159.所述对所述等待池是否为空池进行判断,包括:
160.判断所述等待池是否为空池;
161.若是,则结束当前执行所述待执行任务的流程,并继续判断所述待执行池中是否有待执行任务;若否,则将所述等待池中的待执行任务放入所述待执行池中,并循环执行所述待执行池中的待执行任务。
162.进一步地,执行模块,还用于判断所述待执行任务的执行时间是否大于第五阈值;
163.若是,则重新调度所述待执行任务,并将调度后的待执行任务放入等待池中;若否,则执行所述待执行任务的回调函数。
164.本发明实施例提供的技术方案带来的有益效果是:
165.本发明实施例提供的技术方案相比多线程技术,更简单易实现,且可以满足高性能设备的要求,提高了任务的响应速度;同时能够代替纤程,满足高响应低延迟设备的高性能要求,避免目前纤程同步机制带来的损耗。
166.本发明实施例提供的技术方案在完成多任务功能要求快速达成的前提下,也保证了程序的稳定和健壮性,没有多线程并发的风险和消耗;采用该方法,编程人员可以在不进行多线程编程的情况下,按照上述方法的技术方案即可实现多任务处理的目的。
167.实施例四
168.本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时可以执行如下单线程多任务执行的方法:
169.在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值;
170.对所述待执行任务的任务状态和回调函数进行初始化;
171.对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;
172.所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。
173.本发明实施例提供的技术方案带来的有益效果是:
174.本发明实施例提供的技术方案在完成多任务功能要求快速达成的前提下,也保证了程序的稳定和健壮性,没有多线程并发的风险和消耗;采用该方法,编程人员可以在不进行多线程编程的情况下,按照上述方法的技术方案即可实现多任务处理的目的。
175.实施例五
176.本发明提供了一种计算机存储介质,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
177.在所述任务单元创建待执行任务,设置所述待执行任务的任务状态值为第一阈值;
178.对所述待执行任务的任务状态和回调函数进行初始化;
179.对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中;
180.所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务。
181.进一步地,所述对所述待执行任务的任务状态和回调函数进行初始化,包括:
182.判断是否需要对所述待执行任务的任务状态进行初始化;
183.若是,则设置所述待执行任务的任务状态值为第二阈值;若否,则对所述回调函数子单元中是否已经导入所述待执行任务的回调函数进行判断;
184.所述对所述回调函数子单元中是否已经导入所述待执行任务的回调函数进行判断,包括:
185.判断所述回调函数子单元中是否已经导入所述待执行任务的回调函数;
186.若是,则在所述回调函数子单元中更新所述待执行任务的回调函数;若否,则结束流程。
187.进一步地,所述对初始化后的待执行任务进行调度,将调度后的待执行任务放入所述任务池中,包括:
188.判断所述待执行任务的任务状态值是否为第二阈值;
189.若是,则对所述待执行池中是否有空位进行判断;若否,则对所述待执行任务的任务状态值是否为第三阈值进行判断;
190.所述对所述待执行池中是否有空位进行判断,包括:
191.判断所述待执行池中是否有空位;
192.若是,则将所述待执行任务放入所述待执行池中,并设置所述待执行任务的任务状态值为第三阈值;若否,则将所述待执行任务放入所述等待池中。
193.进一步地,所述对所述待执行任务的任务状态值是否为第三阈值进行判断,包括:
194.判断所述待执行任务的任务状态值是否为第三阈值;
195.若是,则在所述执行次数子单元中增加一次所述待执行任务需要执行的次数;若否,则结束流程。
196.进一步地,所述工作线程获取所述任务池中的待执行任务,并循环执行所述任务池中的待执行任务,包括:
197.判断所述待执行池中是否有待执行任务;
198.若是,则获取所述待执行池中的待执行任务,重新设置所述待执行任务的任务状态值为第二阈值,并执行所述待执行任务的回调函数,对所述待执行任务的执行次数是否
为第四阈值进行判断;若否,则结束流程。
199.进一步地,所述对所述待执行任务的执行次数是否为第四阈值进行判断,包括:
200.判断所述待执行任务的执行次数是否为第四阈值;
201.若是,则对所述等待池是否为空池进行判断;若否,则对所述待执行任务的执行时间是否大于第五阈值进行判断;
202.所述对所述等待池是否为空池进行判断,包括:
203.判断所述等待池是否为空池;
204.若是,则结束当前执行所述待执行任务的流程,并继续判断所述待执行池中是否有待执行任务;若否,则将所述等待池中的待执行任务放入所述待执行池中,并循环执行所述待执行池中的待执行任务。
205.进一步地,所述对所述待执行任务的执行时间是否大于第五阈值进行判断,包括:
206.判断所述待执行任务的执行时间是否大于第五阈值;
207.若是,则重新调度所述待执行任务,并将调度后的待执行任务放入等待池中;若否,则执行所述待执行任务的回调函数。
208.图8为本发明实施例五提供的可被用于实施本技术中所述的各个实施例的示例性系统;
209.如图8所示,在一些实施例中,系统能够作为各所述实施例中的任意一个用于单线程多任务执行的上述设备。在一些实施例中,系统可包括具有结果的一个或多个计算机可读介质(例如,系统存储器或nvm/存储设备)以及与该一个或多个计算机可读介质耦合并被配置为执行结果以实现模块从而执行本技术中所述的动作的一个或多个处理器(例如,(一个或多个)处理器)。
210.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来结果相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
211.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
212.以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1