快速释放线程的资源调度方法和系统与流程

文档序号:11707460阅读:201来源:国知局
快速释放线程的资源调度方法和系统与流程

本申请涉及计算机运算处理技术领域,尤其涉及一种快速释放线程的资源调度方法和系统。



背景技术:

计数锁,即在多线程并发操作中,对一组任务进行整体锁控制的机制,其表现为应在预期任务执行完成时释放锁。

现有主流方案主要采用如下步骤:

a.初始化计数锁,设置一个任务数初值n,以及一个超时时间t。

b.主线程提交所有任务开始执行,计数锁进行计数。

c.主线程等待计数锁释放,在此期间,执行任务的线程在执行完成时将计数锁的n执行减一操作。

d.计数锁在n减为零,或者等待时间超过设定的超时时间t时释放。

但是,在执行相关的一组任务时,若其中一个任务失败,计数锁无法快速得到释放,其他任务的线程仍然会被占用直到对应的任务执行结束,产生非必要的资源消耗,同时,主线程无法获知各个任务的执行状态,只能在计数锁置零时结束该组任务并退出该主线程,响应速度慢,资源占用时间长,运算效率较低。



技术实现要素:

为解决现有技术中的上述问题,本申请的一个目的在于提出一种快速释放线程的资源调度方法及系统,可以在执行相关联的一组任务时对任务的失败进行快速响应并终止相关任务,避免非必要的资源消耗。

为达到上述目的,本申请实施例提出的快速释放线程的资源调度方法,包括:调度线程将多个任务分配至任务线程;计数锁记录所述多个任务线程的任务完成情况;当所述多个任务中有至少一个任务执行失败时,对应的任务线程向所述计数锁发送失败信息,并唤醒所述调度线程;所述调度线程获取所述计数锁记录的所述失败信息, 并释放其他相关的任务线程。

为达到上述目的,本申请实施例提出的快速释放线程的资源调度系统,包括:调度线程,用于将多个任务分配至任务线程,以及被唤醒后获取所述计数锁记录的所述失败信息,并释放其他相关的任务线程;计数锁,用于记录所述多个任务线程的任务完成情况;任务线程,用于执行调度线程分配的任务,以及当所述任务执行失败时,向所述计数锁发送失败信息,并唤醒所述调度线程。

由以上本申请实施例提供的技术方案可见,通过在相关联的任务中有一个任务失败时由计数锁记录失败信息并唤醒主线程,主线程根据计数锁的记录释放相关的其他任务线程,能够快速响应一个任务失败导致的全体任务失败,及时释放资源,避免不必要的资源占用;此外,主线程通过计数锁记录的失败原因能够获取相应的失败信息,有利于根据任务失败的信息对系统进行改进,进而提高系统的自动化水平,提高效率。

本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术中利用计数锁进行线程资源调度的原理框图;

图2是本申请一实施例提出的快速释放线程的资源调度方法的流程示意图;

图3是本申请另一实施例的利用计数锁实现快速失败的执行框架示意图;

图4是本申请一实施例的快速释放线程的资源调度系统的结构示意图。

具体实施方式

本申请实施例提供一种快速释放线程的资源调度方法和系统。

为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当 属于本申请保护的范围。

图1是利用计数锁进行线程资源调度的原理框图,在现有技术中,主线程main也可以理解为调度线程,负责对计数锁进行初始化,设置任务数n和超时时间t,将任务发放到线程池中执行,并调用计数锁对线程池中的任务线程进行监督。计数锁开始工作后检查是否设置了超时时间,如果未设置超时时间则直接进入等待,即直到所有任务结束、计数锁置零时才退出,如果设置了超时时间则进入带超时的等待,即所有任务结束、计数锁置零或者等待时间达到超时时间则退出等待。在等待过程中每次任务线程有更新主线程都会被唤醒,检查计数值是否归零:

a)如果未归零,且有超时时间,则计算剩余超时时间是否大于零:

若剩余超时时间大于零,则继续使用剩余超时时间进行等待;

若剩余超时时间小于零,则直接返回,并设置结果为超时;

b)如果未归零,且无超时时间,则继续等待;

c)如果归零,则直接退出等待,并返回。

在上述计数锁机制的基础上,每次任务线程有变化都会记录到计数锁并唤醒主线程检查计数值,但是上述的现有资源调度方法仅适用于不存在结果相关性的多个任务的执行,当一组任务中有一个任务失败,所有任务的执行结果都会受到影响时,这种结果相关性较高的一组任务就会在一个任务失败时无法释放其他的任务线程,导致资源的非必要占用,计数锁和主线程都没有建立迅速响应这种单独失败的机制,从而无法迅速释放所占用的资源。

图2是本申请一实施例提出的快速释放线程的资源调度方法的流程示意图,在该图所示的实施例中,通过任务线程向计数锁发送失败信息并唤醒调度线程,使得调度线程能够迅速识别任务失败,释放其他相关的任务线程。如图2所示,该方法包括:

步骤201,调度线程将多个任务分配至任务线程。

步骤202,计数锁记录所述多个任务线程的任务完成情况。

步骤203,当所述多个任务中有至少一个任务执行失败时,对应的任务线程向所述计数锁发送失败信息,并唤醒所述调度线程。

步骤204,调度线程获取所述计数锁记录的所述失败信息,并释放其他相关的任务线程。

其中,失败信息可以包括任务执行状态和失败原因。任务执行状态例如是任务失 败,失败原因可以有多种情况,可用于生成系统日志或作为运行反馈等。失败信息可以使用特殊标识来进行标记,本申请对此不做限定。

根据现有的调度机制,调度线程也可以称为主线程,在初始化计数锁并将任务分配至任务线程后,主线程会进入休眠,而在任务线程完成任务时将计数锁减一并唤醒主线程来查看计数值是否已经置零。

根据本发明的实施例,在任务线程执行任务失败时也能够向计数锁发送失败信息并唤醒主线程,计数锁记录该任务线程的失败状态和失败原因,主线程在被唤醒后查看计数锁,首先根据计数锁记录的情况终止其他任务的执行,释放相关的其他任务线程,这样能够快速响应一个任务失败导致的全体任务失败,及时释放资源,避免不必要的资源占用;此外,主线程通过计数锁记录的失败原因能够获取相应的反馈,有利于根据任务失败的原因对系统进行改进,进而提高系统的自动化水平。

根据本申请的一个实施例,所述至少一个任务执行失败包括所述至少一个任务重试预设次数后失败,或者,所述至少一个任务在预设时间内未执行成功。例如,可以预先设置每个任务重试多少次后不再重试,认定为任务失败,也可以预先设置一个任务时间,该时间可以相当于计数锁中预设的超时时间,也可以是单独为每一个任务设置的超时时间,当任务执行时间超过该预设时间时,任务被认定为失败。这样在系统中存在整体重试的机制时,能够尽量减少整体任务的重试次数,对一个线程的任务进行多次重试或超时后才停止其他任务的进行,有效减少了资源重复占用,提高效率。

根据本申请的一个实施例,在所述计数锁记录所述多个任务线程的任务完成情况之后,所述方法还包括:所述任务线程在完成任务后向所述计数锁发送任务状态信息;所述计数锁根据任务数量、所述任务状态信息和预设参数进行等待。例如在任务线程执行成功后通知计数锁并唤醒主线程,每有任务执行成功计数值减一,直到计数值为零时释放锁。其中,预设参数可以是超时时间或者重试次数等。

根据本申请的一个实施例,当至少一个任务执行失败时,当至少一个任务执行失败时,所述计数锁的计数值置为预设的特殊值;当所有任务执行成功时,所述计数锁的计数值置零。例如,任务执行成功计数锁置零释放,有一个任务执行失败时计数锁同样释放,但是可以置为一个特殊值,例如置为-1或其它特殊值,从而主进程能够识别该计数锁是正常释放还是异常释放。

根据本申请的一个实施例,所述计数锁中包括预设的结构化数据映射,在所述对 应的任务线程向所述计数锁发送失败信息之后,所述计数锁将所述失败信息记录在所述任务线程对应的所述结构化数据映射中。结构化数据映射例如是预先构建的图表、表格等,与每个线程的标识一一对应,在收到失败信息后,计数锁可以识别发送该失败信息的任务线程的标识,例如线程的编号等,根据该任务线程的标识找到对应的结构化数据映射,并将收到的失败信息相应地写入该映射中,记录的信息例如是:线程编号、执行结果、执行进度、失败原因等,其中,执行结果以失败为主,但是需要理解的是,在执行成功时也可以通过该映射进行记录,从而执行结果也可以是成功,本发明不再对此进行说明;失败原因可以是在执行任务的过程中,任务线程获取到的错误代码或错误信息,例如所执行的任务是到服务器a获取a账户的账户信息,在执行失败时任务线程可以通过可行的手段抓取到服务器a返回的错误信息,错误信息例如是服务器连接超时、账户信息不存在、请求已过期等等。通过结构化数据映射记录每个任务线程相关的失败信息,可以在任务结束后进行有效的错误信息总结和反馈,便于程序的纠错和改进。

根据本发明的实施例,可以在相关联的任务中有一个任务失败时将计数锁释放,并唤醒调度线程释放相关的其他未执行结束的任务线程,能够快速响应一个任务失败导致的全体任务失败,及时释放资源,避免不必要的资源占用;此外,主线程通过计数锁记录的失败原因能够获取相应的反馈,有利于根据任务失败的原因对系统进行改进,进而提高系统的自动化水平,提高效率。

基于同一发明构思,本发明实施例还提供了一种快速释放线程的资源调度系统,可以用于实现上述实施例所描述的方法,如下面的实施例所述。由于快速释放线程的资源调度系统解决问题的原理与快速释放线程的资源调度方法相似,因此快速释放线程的资源调度系统的实施可以参见快速释放线程的资源调度系统的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图3是本申请一实施例的快速释放线程的资源调度系统的结构示意图。本实施例的系统可以为实现相应功能的逻辑部件构成,也可以为运行有相应功能软件的电子设备,本实施例的系统可以是操作系统也可以是计算机程序等。

如图3所示,该快速释放线程的资源调度系统包括:调度线程100、计数锁200 和任务线程300。

其中,调度线程100用于将多个任务分配至任务线程,以及被唤醒后获取所述计数锁记录的所述失败信息,并释放其他相关的任务线程。

计数锁200用于记录所述多个任务线程的任务完成情况;

任务线程300用于执行调度线程分配的任务,以及当所述任务执行失败时,向所述计数锁发送失败信息,并唤醒所述调度线程。

根据本申请的一个实施例,所述失败信息包括任务执行状态和失败原因。

根据本申请的一个实施例,所述至少一个任务执行失败包括所述至少一个任务重试预设次数后失败,或者,所述至少一个任务在预设时间内未执行成功。

根据本申请的一个实施例,所述任务线程还用于在完成任务后向所述计数锁发送任务状态信息;所述计数锁还用于根据任务数量、所述任务状态信息和预设参数进行等待。

根据本申请的一个实施例,所述计数锁还用于:当至少一个任务执行失败时,将计数值置为预设的特殊值;当所有任务执行成功时,将计数值置为零。

根据本申请的一个实施例,所述计数锁还包括记录模块,用于将所述任务线程的所述失败信息记录在对应的结构化数据映射中。

根据本发明的实施例,可以在相关联的任务中有一个任务失败时将计数锁释放,并唤醒调度线程释放相关的其他未执行结束的任务线程,能够快速响应一个任务失败导致的全体任务失败,及时释放资源,避免不必要的资源占用;此外,主线程通过计数锁记录的失败原因能够获取相应的反馈,有利于根据任务失败的原因对系统进行改进,进而提高系统的自动化水平,提高效率。

具体地,如图4所示是利用计数锁实现快速失败的执行框架示意图:

步骤1,初始化计数锁,赋予当前锁一个任务组数量的初值n。其中,在一个具体实施例中,还可以为计数锁初始化超时时间,当整体任务执行时间超过超时时间时,计数锁置零。

步骤2,主线程将任务分配到任务线程开始执行。

具体地,主线程调度线程池中的任务线程执行相应的任务,计数锁记录多个任务线程的任务完成情况。

步骤3,主线程休眠,等待计数锁释放。

步骤4,当任务线程执行任务成功时,任务线程控制计数锁将计数值减一,并唤醒主线程查看计数锁状态。

步骤5,当任务线程执行任务失败时,任务线程向计数锁发送失败信息,将计数值置为预设的特殊值,并唤醒主线程。

具体地,任务线程可以通过计数锁的预设接口对计数锁中的该线程对应的结构化数据映射进行修改,也可以是任务线程向计数锁发送失败信息,计数锁根据该失败信息和任务线程的标识修改对应的结构化数据映射,并相应的修改计数值。

在具体的实施例中,可以通过设置超时时间来判断任务失败,也可以通过所执行的任务代码本身的返回值来判断任务失败,还可以通过重试预设次数后仍失败来判断任务失败。这些方式都可以通过对任务代码本身进行设置或修改来实现,在此不再赘述。

步骤6,主线程被唤醒后查看计数锁状态,判断计数锁是否正常释放。

其中,预设的特殊值例如可以是负数、小数或其他的非0到n之间的正整数值等,本实施例以-1为例进行说明。

具体地,可以通过计数锁的计数值来判断是否正常释放,如果计数值为1到n之间的常规整数值,则判断计数锁尚未释放,执行步骤3;如果计数值为0,则判断计数锁为正常释放,所有任务线程执行完毕且执行成功,执行步骤7;如果计数值为-1,则判断计数锁为异常释放,执行步骤8。

步骤7,主线程释放,返回任务执行结果。

步骤8,主线程取消相关的其他任务,释放对应的任务线程。

步骤9,主线程获取计数锁记录的信息,根据各任务线程的返回结果记录日志。

其中步骤9是可选的,可以通过步骤9获取各任务线程的返回结果生成日志,通过后期对日志的整理总结,对任务代码或系统等进行改进。

在本申请的具体实施例中,以任务是获取保存在n台服务器上的a账户的账户信息为例,主线程可以将该任务分为n个并行的任务分配给n个任务线程,每个任务的内容是到其中一台服务器获取a账户存储在该服务器上的部分账户信息。同时,主线程构造一个初始计数值为n的计数锁counter对各任务线程的任务执行情况进行监督。

任务线程开始执行任务后,主线程进入休眠,计数锁开始计数,计数锁可以设置 超时时间,在超过预设的超时时间后判断任务失败,也可以不设置超时时间,只有在计数锁的计数值为预设值时才释放主线程。预设值例如是0或预设的特殊值。

每当有任务执行成功,对应的任务线程会向计数锁发送任务完成的信息,并通过通知信号notify唤醒主线程查看计数锁。计数锁根据该信息通过countdown()指令将计数值减一,直到所有任务执行成功,计数值减为0,任务整体执行完毕,主线程释放,并返回执行结果。

当其中一个任务线程失败时,则无法完整获取到a账户的账户信息,因此该任务整体失败,剩余的未完成的相关任务线程就都没有继续执行的必要了。此时,失败的任务线程将失败信息(例如失败原因、错误代码等)通过预设接口记录到计数锁中对应的结构化数据映射中,并通过通知信号notify唤醒主线程查看计数锁,主线程根据计数锁的计数值为-1判断计数锁计数异常,快速释放计数锁,停止相关的其他任务,释放相关的任务线程。判断任务执行失败的方法参照步骤5。此外,还可以根据结构化数据映射中记录的内容生成相关的日志并进行错误分析。

本实施例可以在相关联的任务中有一个任务失败时将计数锁的计数值置为预设的特殊值,并唤醒主线程释放相关的其他任务线程,能够快速响应一个任务失败导致的全体任务失败,及时释放资源,避免不必要的资源占用;此外,主线程通过计数锁记录的失败原因能够获取相应的反馈,有利于根据任务失败的原因对系统进行改进,进而提高系统的自动化水平,提高效率。

需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑 功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1