技术简介:
本专利针对多线程环境下资源访问效率低、竞争冲突严重的问题,提出基于资源标识符队列与访问状态的协同管理机制。通过动态识别资源状态、按序分配访问权限,避免线程阻塞与资源争用,实现任务的高效并发执行,显著提升系统整体吞吐能力与稳定性。
关键词:任务执行优化,资源访问管理
1.本发明实施例涉及计算机技术领域,具体而言,涉及一种任务执行方法、装置、存储介质及电子装置。
背景技术:2.在进行多线程程序的开发时,常常遇到多个线程需要访问相同资源的场景,比如多个线程访问同一处内存数据、同一个数据库表、多个线程使用同一个网络连接发送消息等场景,在这些场景中,对资源进行保护是必要的操作,否则轻则导致数据异常,程序不能按预期效果执行,重则引起程序崩溃。
3.若对每一个资源都创建专用线程进行读写等操作固然可以解决这一问题,但这仅适用于所需资源少的情景,否则会导致线程数目过大,过于消耗计算机资源。为了限制线程的的数目,如何用有限的线程来安全并高效地访问所需的所有资源,是多线程程序开发时需要解决的问题,在相关技术中,当多个线程同时执行访问相同的资源时,需要阻塞及等待的环节,导致资源的访问效率较低。即相关技术中存在着资源的访问效率较低的问题。
4.针对相关技术中存在的资源的访问效率较低的问题,目前尚未提出有效的解决方案。
技术实现要素:5.本发明实施例提供了一种任务执行方法、装置、存储介质及电子装置,以至少解决相关技术中存在的资源的访问效率较低的问题。
6.根据本发明的一个实施例,提供了一种任务执行方法,包括:第一线程在资源标识符队列中读取并移除位于队列头部的第一资源标识符,并获取所述第一资源标识符对应的资源访问状态,其中,所述第一资源标识符是第一资源的标识符;在所述第一资源标识符对应的资源访问状态表示所述第一资源正被访问的情况下,所述第一线程将所述第一资源标识符插入到所述资源标识符队列的队列尾部;所述第一线程在所述资源标识符队列中读取并移除位于队列头部的第二资源标识符,并获取所述第二资源标识符对应的资源访问状态,其中,所述第二资源标识符是第二资源的标识符;在所述第二资源标识符对应的资源访问状态表示所述第二资源未被访问的情况下,所述第一线程访问所述第二资源,将所述第二资源标识符对应的资源访问状态设置为表示所述第二资源正被访问,并根据所述第二资源执行与所述第二资源对应的待执行任务。
7.在一个示例性实施例中,所述根据所述第二资源执行与所述第二资源对应的待执行任务,包括:在所述第二资源对应的任务标识队列中读取位于队列头部的第一任务标识,其中,所述第二资源对应的任务标识队列用于记录请求访问所述第二资源的任务的任务标识;根据所述第二资源执行所述第一任务标识所表示的第一任务。
8.在一个示例性实施例中,所述方法还包括:在执行完所述第一任务的情况下,所述第一线程将所述第二资源标识符对应的资源访问状态设置为表示所述第二资源未被访问,
并将所述第一任务标识从所述第二资源对应的任务标识队列中移除。
9.在一个示例性实施例中,所述方法还包括:在执行与所述第二资源对应的待执行任务的过程中,在线程池中存在空闲的第二线程的情况下,所述第二线程在所述资源标识符队列中读取并移除位于队列头部的第三资源标识符,并获取所述第三资源标识符对应的资源访问状态,其中,所述第三资源标识符是第三资源的标识符;在所述第三资源标识符对应的资源访问状态表示所述第三资源未被访问的情况下,所述第二线程访问所述第三资源,将所述第三资源标识符对应的资源访问状态设置为表示所述第三资源正被访问,并根据所述第三资源执行与所述第三资源对应的待执行任务。
10.在一个示例性实施例中,所述方法还包括:在获取到待执行的新任务的情况下,确定所述新任务所请求访问的第四资源;创建用于标识所述第四资源的第四资源标识符;将所述第四资源标识符插入到所述资源标识符队列的队列尾部,并将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部,其中,所述第四资源对应的任务标识队列用于记录请求访问所述第四资源的任务的任务标识。
11.在一个示例性实施例中,所述将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部,包括:在确定内存中不包括与所述第四资源对应的任务标识队列的情况下,创建所述第四资源对应的任务标识队列,并将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部。
12.根据本发明的另一个实施例,还提供了一种任务执行装置,包括:第一处理模块,用于通过第一线程在资源标识符队列中读取并移除位于队列头部的第一资源标识符,并获取所述第一资源标识符对应的资源访问状态,其中,所述第一资源标识符是第一资源的标识符;插入模块,用于在所述第一资源标识符对应的资源访问状态表示所述第一资源正被访问的情况下,通过所述第一线程将所述第一资源标识符插入到所述资源标识符队列的队列尾部;第二处理模块,用于通过所述第一线程在所述资源标识符队列中读取并移除位于队列头部的第二资源标识符,并获取所述第二资源标识符对应的资源访问状态,其中,所述第二资源标识符是第二资源的标识符;第三处理模块,用于在所述第二资源标识符对应的资源访问状态表示所述第二资源未被访问的情况下,通过所述第一线程访问所述第二资源,将所述第二资源标识符对应的资源访问状态设置为表示所述第二资源正被访问,并根据所述第二资源执行与所述第二资源对应的待执行任务。
13.在一个示例性实施例中,所述第三处理模块包括:第一读取单元,用于在所述第二资源对应的任务标识队列中读取位于队列头部的第一任务标识,其中,所述第二资源对应的任务标识队列用于记录请求访问所述第二资源的任务的任务标识;第一执行单元,用于根据所述第二资源执行所述第一任务标识所表示的第一任务。
14.根据本发明的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
15.根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
16.通过本发明,第一线程在资源标识符队列中读取位于队列头部的第一资源标识符
及移除第一资源标识符,并获取第一资源标识符对应的资源访问状态,当第一资源标识符对应的资源访问状态表示第一资源正被访问时,第一线程将第一资源标识符插入到资源标识符队列的队列尾部,此时第一线程将在资源标识符队列中继续读取位于队列头部的第二资源标识符及移除第二资源标识符,并获取第二资源标识符对应的资源访问状态,当第二资源标识符对应的资源访问状态表示第二资源未被访问时,第一线程则访问第二资源,并根据第二资源执行与第二资源对应的待执行任务,同时,将第二资源标识符对应的资源访问状态设置为第二资源正被访问。即,当线程获取第一资源标识符并确定第一资源正被访问时,将第一资源标识符插入到资源标识符队列的尾部,以及获取下一个资源标识符,即第二资源标识符,当确定第二资源标识符对应的第二资源未被访问时,则访问第二资源,并执行与第二资源对应的待执行任务,避免了相关技术中当资源标识符对应的资源正被访问时,线程将继续等待从而导致资源访问效率较低的问题,及任务执行效率较低的问题。因此,解决了相关技术中存在的资源的访问效率较低的问题,达到了提高资源访问的效率的效果。
附图说明
17.图1是本发明实施例的任务执行方法的移动终端硬件结构框图;
18.图2是根据本发明实施例的任务执行方法的流程图;
19.图3是根据本发明实施例的资源标识符队列示例图一;
20.图4是根据本发明实施例的资源标识符队列示例图二;
21.图5是根据本发明实施例的资源标识符队列示例图三;
22.图6是根据本发明实施例的任务队列示意图一;
23.图7是根据本发明实施例的任务队列示意图二;
24.图8是根据本发明实施例的任务队列示意图三;
25.图9是根据本发明具体实施例的一种资源访问方法的流程图;
26.图10是根据本发明实施例的任务执行装置的结构框图。
具体实施方式
27.下文中将参考附图并结合实施例来详细说明本发明的实施例。
28.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
29.本技术实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的任务执行方法的移动终端硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
30.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发
明实施例中的任务执行方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
31.传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。
32.在本实施例中提供了一种任务执行方法,图2是根据本发明实施例的任务执行方法的流程图,如图2所示,该流程包括如下步骤:
33.步骤s202,第一线程在资源标识符队列中读取并移除位于队列头部的第一资源标识符,并获取所述第一资源标识符对应的资源访问状态,其中,所述第一资源标识符是第一资源的标识符;
34.步骤s204,在所述第一资源标识符对应的资源访问状态表示所述第一资源正被访问的情况下,所述第一线程将所述第一资源标识符插入到所述资源标识符队列的队列尾部;
35.步骤s206,所述第一线程在所述资源标识符队列中读取并移除位于队列头部的第二资源标识符,并获取所述第二资源标识符对应的资源访问状态,其中,所述第二资源标识符是第二资源的标识符;
36.步骤s208,在所述第二资源标识符对应的资源访问状态表示所述第二资源未被访问的情况下,所述第一线程访问所述第二资源,将所述第二资源标识符对应的资源访问状态设置为表示所述第二资源正被访问,并根据所述第二资源执行与所述第二资源对应的待执行任务。
37.通过上述步骤,第一线程在资源标识符队列中读取位于队列头部的第一资源标识符及移除第一资源标识符,并获取第一资源标识符对应的资源访问状态,当第一资源标识符对应的资源访问状态表示第一资源正被访问时,第一线程将第一资源标识符插入到资源标识符队列的队列尾部,此时第一线程将在资源标识符队列中继续读取位于队列头部的第二资源标识符及移除第二资源标识符,并获取第二资源标识符对应的资源访问状态,当第二资源标识符对应的资源访问状态表示第二资源未被访问时,第一线程则访问第二资源,并根据第二资源执行与第二资源对应的待执行任务,同时,将第二资源标识符对应的资源访问状态设置为第二资源正被访问。即,当线程获取第一资源标识符并确定第一资源正被访问时,将第一资源标识符插入到资源标识符队列的尾部,以及获取下一个资源标识符,即第二资源标识符,当确定第二资源标识符对应的第二资源未被访问时,则访问第二资源,并执行与第二资源对应的待执行任务,避免了相关技术中当资源标识符对应的资源正被访问时,线程将继续等待从而导致资源访问效率较低的问题,及任务执行效率较低的问题。因此,解决了相关技术中存在的资源的访问效率较低的问题,达到了提高资源访问的效率的
效果。
38.其中,上述步骤的执行主体可以为程序,或线程,如上述第一线程,可以是线程池中的任一个线程,或者为配置在存储设备上的具备人机交互能力的处理器,或者为具备类似处理能力的处理设备或处理单元等,但不限于此。下面以第一线程执行上述操作为例(仅是一种示例性说明,在实际操作中还可以是其他的设备或模块来执行上述操作)进行说明:
39.在上述实施例中,第一线程在资源标识符队列中读取并移除位于队列头部的第一资源标识符,并获取第一资源标识符对应的资源访问状态,其中,第一资源标识符是第一资源的标识符,在实际应用中,资源标识符队列中可能存放了一个或多个不同资源所对应的资源标识符,如图3所示,图3是根据本发明实施例的资源标识符队列示例图一,第一线程读取队列头部的第一资源标识符,如图3中的res1,当然,资源标识符队列中也可能是空的;在第一资源标识符对应的资源访问状态表示第一资源正被访问的情况下,第一线程将第一资源标识符插入到资源标识符队列的队列尾部,即,当确定第一资源标识符(如图3中的res1)对应的资源访问状态为第一资源正被访问时,第一线程将第一资源标识符插入到资源标识符队列的队列尾部,如图4所示,图4是根据本发明实施例的资源标识符队列示例图二,res1被插入到队列尾部,此时队列头部对应的是res2;第一线程在资源标识符队列中读取并移除位于队列头部的第二资源标识符,并获取第二资源标识符对应的资源访问状态,其中,第二资源标识符是第二资源的标识符,例如,第二资源标识符为图4中res2,此时队列头部对应的是res2;在第二资源标识符对应的资源访问状态表示第二资源未被访问的情况下,第一线程访问第二资源,将第二资源标识符对应的资源访问状态设置为表示第二资源正被访问,并根据第二资源执行与第二资源对应的待执行任务,即,当确定第二资源当前未被其他线程访问时,第一线程将访问第二资源,并执行与第二资源对应的待执行任务。需要说明的是,当上述第一线程确定第一资源标识符对应的资源访问状态为第一资源未被访问时,第一线程将访问第一资源,并执行与第一资源队形的待执行任务。通过本实施例,避免了相关技术中当资源标识符对应的资源正被访问时,线程将继续等待从而导致资源访问效率较低的问题,及任务执行效率较低的问题。因此,解决了相关技术中存在的资源的访问效率较低的问题,达到了提高资源访问的效率的效果。
40.结合图5对上述实施例进一步进行说明,图5是根据本发明实施例的资源标识符队列示例图三,第一线程读取资源标识符队列头部的第一资源标识符(如图5中的res1),获取第一资源标识符(如res1)对应的资源访问状态,若第一资源标识符对应的资源访问状态为res1对应的资源正被访问时,将res1移除并将res1插入资源标识符队列的队列尾部;而若第一资源标识符对应的资源访问状态为res1对应的资源未被访问时,将res1移除,此时,第一线程可访问res1对应的资源,并执行对应的任务。
41.需要说明的是,资源标识符队列中存储了不同资源的标识符,如图3中res1~resn、resx是不同资源的标识符,每个资源标识符是在接收到任务时所创建的并依次从资源标识符队列的尾部存入队列中的,即越靠近头部的资源标识符表示越早存入的资源标识符,越靠近尾部的资源标识符表示越晚存入的资源标识符;图3中res1~resn仅为一种示例,并不表示res1一定比res2先存入队列中,主要根据创建的新任务所需访问的资源,例如,请求访问resn的任务先于请求访问res1的任务,则resn早于res1,此时resn相对于res1更靠近队列头部;还需要说明的是,队列中的资源标识符res1~resn也是可能重复出现的,
例如:从队列头部到尾部依次为res1-res2-res1-res10-resn-res2
…
。
42.在一个可选的实施例中,所述根据所述第二资源执行与所述第二资源对应的待执行任务,包括:在所述第二资源对应的任务标识队列中读取位于队列头部的第一任务标识,其中,所述第二资源对应的任务标识队列用于记录请求访问所述第二资源的任务的任务标识;根据所述第二资源执行所述第一任务标识所表示的第一任务。在本实施例中,在执行与第二资源对应的待执行任务过程中,前述第一线程在第二资源对应的任务标识队列中读取位于队列头部的第一任务标识,如图6中第二资源(如res对应的资源)的任务队列中的队列头部的任务标识为task
2-1
(即第一任务标识),在实际应用中,任务队列中可能包括一个或多个任务标识,任务队列中的每个任务标识均对应请求访问相应资源的任务的标识,例如,图6中res1对应的任务队列中记录了请求访问res1资源的任务标识task
1-1
~task
1-x
,res2对应的任务队列中记录了请求访问res2资源的任务标识task
2-1
~task
2-y
,resn对应的任务队列中记录了请求访问resn资源的任务标识task
n-1
~task
n-z
,在实际应用中,每个任务队列中的任务标识也是按照任务创建的先后顺序依次存入该队列中的,例如,task
2-1
对应的任务的创建时间早于task
2-2
,task
2-2
对应的任务的创建时间早于task
2-j
;第一线程在读取到第一任务标识(如上述task
2-1
)后,执行第一任务标识所表示的第一任务,即task
2-1
所标识的任务。通过本实施例,实现了通过读取任务标识队列的队列头部的第一任务标识以执行与第一任务标识所对应的任务的目的。
43.在一个可选的实施例中,所述方法还包括:在执行完所述第一任务的情况下,所述第一线程将所述第二资源标识符对应的资源访问状态设置为表示所述第二资源未被访问,并将所述第一任务标识从所述第二资源对应的任务标识队列中移除。在本实施例中,当第一线程执行完上述第一任务后,第一线程将第二资源标识符(如上述res2)对应的资源访问状态设置为未被访问,即,此时其他线程可以访问第二资源标识符对应的资源,同时,第一线程还将第一任务标识(如上述task
2-1
)从第二资源对应的任务标识队列(如上述res2对应的任务队列)中移除,如图7所示,移除后res2对应的任务队列的队列头部对应的是任务标识task
2-2
,即,当其它线程或第一线程执行的下一个任务所请求访问的资源如果是res2对应的资源且该资源的访问状态为未被访问时,将执行task
2-2
所对应的任务。通过本实施例,实现了在第一任务执行完成后,及时将第二资源标识符对应的资源访问状态设置为未被访问的状态的目的,从而可以允许其他线程继续访问第二资源。
44.在一个可选的实施例中,所述方法还包括:在执行与所述第二资源对应的待执行任务的过程中,在线程池中存在空闲的第二线程的情况下,所述第二线程在所述资源标识符队列中读取并移除位于队列头部的第三资源标识符,并获取所述第三资源标识符对应的资源访问状态,其中,所述第三资源标识符是第三资源的标识符;在所述第三资源标识符对应的资源访问状态表示所述第三资源未被访问的情况下,所述第二线程访问所述第三资源,将所述第三资源标识符对应的资源访问状态设置为表示所述第三资源正被访问,并根据所述第三资源执行与所述第三资源对应的待执行任务。在本实施例中,当第一线程在执行与所述第二资源对应的待执行任务时,线程池中其他线程可继续读取资源标识符队列中位于队列头部的资源标识符,例如,当线程池中存在空闲的第二线程时,此时第二线程可在上述资源标识符队列中读取并移除队列头部的资源标识符,如上述第三资源标识符,并获取第三资源标识符对应的资源访问状态,如果第三资源标识符对应的资源访问状态为第三
资源未被访问时,此时,第二线程即可访问第三资源,并根据第三资源执行与第三资源对应的待执行任务。通过本实施例,线程池中包括的多个线程可以不断地从资源标识符队列中获取队列头部的资源标识符(如上述第三资源标识符),并在资源标识符所对应的资源未被访问的情况下执行与资源标识符对应的任务标识队列中的任务,即实现了线程在执行过程中不会出现阻塞或等待的问题,直至资源标识符队列及所有任务队列为空为止,因此,可实现高效地访问资源及执行任务的目的。
45.在一个可选的实施例中,所述方法还包括:在获取到待执行的新任务的情况下,确定所述新任务所请求访问的第四资源;创建用于标识所述第四资源的第四资源标识符;将所述第四资源标识符插入到所述资源标识符队列的队列尾部,并将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部,其中,所述第四资源对应的任务标识队列用于记录请求访问所述第四资源的任务的任务标识。例如,当任务分配器在获取到待执行新任务时,确定新任务所请求访问的第四资源,创建与第四资源对应的第四资源标识符,并将第四资源标识符插入到资源标识符队列的队列尾部,即,对于每个新的任务,根据新的任务所需访问的资源,将资源的唯一标识符插入资源标识符队列的尾部;同时,还将新任务对应的任务标识插入到与上述第四资源对应的任务标识队列的队列尾部,如图8所示,将新的任务对应的任务标识(如图8中的task
4-w
)插入第四资源(如res4)对应的任务标识队列的队列尾部。即,在获取到新任务时创建对应的资源标识符并将资源标识符插入资源标识符队列的尾部及将任务标识插入任务标识队列的尾部,即越早获取到的任务,对应的任务标识越早存入相应的任务标识队列中,也即越靠近队列的头部;因此,实现了在任务队列中依次存储需要访问对应资源的所有任务的目的,从而可以实现使得线程从任务标识队列中也是按顺序依次取出任务的目的。
46.在一个可选的实施例中,所述将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部,包括:在确定内存中不包括与所述第四资源对应的任务标识队列的情况下,创建所述第四资源对应的任务标识队列,并将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部。在本实施例中,任务分配器获取到新的任务时,当确定内存中不包括与第四资源(即新任务需要访问的资源)对应的任务标识队列的情况下,任务分配器将创建与第四资源对应的任务标识队列,并将新的任务的标识插入到该新创建的第四资源对应的任务标识队列的队列尾部。
47.显然,上述所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。下面结合实施例对本发明进行具体说明。
48.图9是根据本发明具体实施例的一种资源访问方法的流程图,该流程包括:
49.s902,首先对线程池会访问到的所有需要保护的资源,创建资源唯一标识符、资源访问状态和任务队列;其中通过资源唯一标识符可以获取到此资源的访问状态和任务队列,资源访问状态分为访问状态和未访问状态,分别表示此资源当前处于被某一线程访问的状态或是未被任何线程访问的状态,任务队列中顺序存储着需要访问此资源的所有任务;再创建一个资源标识符队列,其中可以存放资源的唯一标识符。
50.s904,每个新的任务,根据任务所需访问的资源,将任务插入其所需要的资源的任务队列队尾,同时将此资源的唯一标识符插入资源标识符队列的队尾。
51.s906,线程池中的线程读取并移除资源标识符队列头部的资源标识符。
52.s908,判断是否获取到资源标识符。
53.s910,在上述步骤s908的判断结果为否的情况下,即资源标识符队列为空,如果资源标识符队列为空,则说明此时并没有需要执行的任务;此时,可回到步骤s906重新获取新的资源标识符。
54.s912,在上述步骤s908的判断结果为否的情况下,通过此资源标识符获取该资源的访问状态。
55.s914,判断资源访问状态,即判断资源是访问状态,或未访问状态。
56.s916,如果是未访问状态,则修改此状态为访问状态。
57.s918,并从此资源的任务队列头部读取一条任务进行执行。
58.s920,执行完成后从此资源的任务队列中移除此任务并重新将此资源的访问状态修改为未访问状态。然后回到步骤s906开始重复执行上述步骤。
59.s922,如果上述步骤s914的判断结果为资源是访问状态,则将资源标识符重新插入资源标识符队列的队尾。然后,从步骤s906开始重复上述步骤,这是因为此时该资源正在被线程池中的另一条线程访问,由于线程池中的每个线程都会先判断所需要访问的资源的访问状态,就可以保证在该线程执行这一条任务时,线程池中的其他线程都不会访问此资源,避免了线程池中多个线程访问同一资源的情况。
60.在上述实施例中,线程的执行过程中没有需要阻塞并等待的环节,当资源的访问状态为访问状态时,也并不需要等待该资源的访问状态变为未访问状态,而是将资源标识符重新插入资源标识符队列的队尾进入下一次循环,重复此步骤直到获取到一个资源访问状态为未访问状态的资源。对于每一个资源,线程池中的任意一个线程都有可能访问此资源,但同一时刻最多只会有一个线程访问此资源。同时,因为资源的任务队列中顺序的存储着需要访问此资源的任务,所以当前访问资源的线程从资源队列中取出的任务也是顺序的,任务的顺序执行进一步保证了资源的准确性。
61.在上述实施例中,通过为资源创建资源保护状态,使线程能够判断当前资源的访问状态,避免了多线程对同一资源同时进行访问;线程判断当前资源是访问状态时,继续执行下一个循环,直到找到一个未被访问的资源,避免了对占用资源的等待,提高了线程池的利用率;每个新的任务,根据任务所需访问的资源,将此资源的唯一标识符插入资源标识符队列的队尾,使线程池中的所有线程都可以通过读取此资源标识符队列获取当前需要执行的任务,提高线程利用率;每个新的任务,根据任务所需访问的资源,将任务插入其所需要的资源的任务队列队尾,保证对同一进行操作的业务是顺序执行的。
62.本发明实施例的技术方案具有以下优点:(1)适用于对资源需要进行保护的场景;通过为资源创建资源保护状态,能够确保不会出现线程池中多个线程共同访问同一资源导致异常;(2)提高了线程池的利用率;通过资源标识符队列,获取资源保护状态是访问状态的线程,不需要阻塞并等待其他线程释放对资源的占用,而是可以在资源标识符队列中继续执行下一个循环,直到找到一个未被访问的资源,执行任务;(3)通过为资源创建任务队列,能够保证多个需要对同一资源进行操作的业务是顺序执行的,进一步保证了资源的准确。
63.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多
情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
64.在本实施例中还提供了一种任务执行装置,图10是根据本发明实施例的任务执行装置的结构框图,如图10所示,该装置包括:
65.第一处理模块1002,用于通过第一线程在资源标识符队列中读取并移除位于队列头部的第一资源标识符,并获取所述第一资源标识符对应的资源访问状态,其中,所述第一资源标识符是第一资源的标识符;
66.插入模块1004,用于在所述第一资源标识符对应的资源访问状态表示所述第一资源正被访问的情况下,通过所述第一线程将所述第一资源标识符插入到所述资源标识符队列的队列尾部;
67.第二处理模块1006,用于通过所述第一线程在所述资源标识符队列中读取并移除位于队列头部的第二资源标识符,并获取所述第二资源标识符对应的资源访问状态,其中,所述第二资源标识符是第二资源的标识符;
68.第三处理模块1008,用于在所述第二资源标识符对应的资源访问状态表示所述第二资源未被访问的情况下,通过所述第一线程访问所述第二资源,将所述第二资源标识符对应的资源访问状态设置为表示所述第二资源正被访问,并根据所述第二资源执行与所述第二资源对应的待执行任务。
69.在一个可选的实施例中,上述第三处理模块1008包括:第一读取单元,用于通过所述第一线程在所述第二资源对应的任务标识队列中读取位于队列头部的第一任务标识,其中,所述第二资源对应的任务标识队列用于记录请求访问所述第二资源的任务的任务标识;第一执行单元,用于通过所述第一线程根据所述第二资源执行所述第一任务标识所表示的第一任务。
70.在一个可选的实施例中,上述装置还包括:第四处理模块,用于在执行完所述第一任务的情况下,通过所述第一线程将所述第二资源标识符对应的资源访问状态设置为表示所述第二资源未被访问,并将所述第一任务标识从所述第二资源对应的任务标识队列中移除。
71.在一个可选的实施例中,上述装置还包括:第五处理模块,用于在执行与所述第二资源对应的待执行任务的过程中,在线程池中存在空闲的第二线程的情况下,通过所述第二线程在所述资源标识符队列中读取并移除位于队列头部的第三资源标识符,并获取所述第三资源标识符对应的资源访问状态,其中,所述第三资源标识符是第三资源的标识符;第六处理模块,用于在所述第三资源标识符对应的资源访问状态表示所述第三资源未被访问的情况下,通过所述第二线程访问所述第三资源,将所述第三资源标识符对应的资源访问状态设置为表示所述第三资源正被访问,并根据所述第三资源执行与所述第三资源对应的待执行任务。
72.在一个可选的实施例中,上述装置还包括:确定模块,用于在获取到待执行的新任务的情况下,确定所述新任务所请求访问的第四资源;创建模块,用于创建用于标识所述第四资源的第四资源标识符;第七处理模块,用于将所述第四资源标识符插入到所述资源标
识符队列的队列尾部,并将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部,其中,所述第四资源对应的任务标识队列用于记录请求访问所述第四资源的任务的任务标识。
73.在一个可选的实施例中,上述第七处理模块包括:处理单元,用于在确定内存中不包括与所述第四资源对应的任务标识队列的情况下,创建所述第四资源对应的任务标识队列,并将所述新任务的任务标识插入到所述第四资源对应的任务标识队列的队列尾部。
74.需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
75.本发明的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
76.在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:u盘、只读存储器(read-only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
77.本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
78.在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
79.本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
80.显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
81.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。