一种任务队列运行装置的制作方法

文档序号:19349955发布日期:2019-12-06 21:16阅读:153来源:国知局
一种任务队列运行装置的制作方法

本发明涉及计算机技术领域,特别是涉及一种任务队列运行装置。



背景技术:

目前,任务队列运行装置通过任务加载器加载可执行任务至任务阻塞队列,任务阻塞队列进栈可执行任务,任务触发器向任务阻塞队列发送触发信号,以使所务阻塞队列将可执行任务作出栈处理,并提交任务运行器直接作运行处理。但是,在并发量超过服务器的吞吐量时,可能导致服务器负载过大,且在任务运行失败时,可能导致可执行任务重复执行,从而导致服务器资源浪费。



技术实现要素:

本发明实施例旨在提供一种任务队列运行装置,其能够避免服务器负载过大和资源浪费。

为解决上述技术问题,本发明实施例提供以下技术方案:

第一方面,本发明实施例提供一种任务队列运行装置,应用于服务器,包括:

任务加载器,用于加载可执行任务;

任务阻塞队列,用于进栈所述可执行任务;

任务触发器,用于向所述任务阻塞队列发送触发信号,以使所述任务阻塞队列将所述可执行任务作出栈处理;以及

任务运行器,用于根据预设并发阈值,运行所述可执行任务,当所述可执行任务运行失败时,暂停所述可执行任务的运行。

在一些实施例中,所述任务运行器包括运行队列与暂停队列,所述运行队列用于根据预设并发阈值,运行所述可执行任务,当所述可执行任务运行失败时,所述运行队列将所述可执行任务加入所述暂停队列。

在一些实施例中,所述运行队列用于根据预设并发阈值,运行所述可执行任务,包括:

所述运行队列用于判断所述运行队列的任务数量是否小于所述预设并发阈值;

若是,触发将所述任务阻塞队列中的可执行任务加入至所述运行队列;

若否,等待所述运行队列中的一个或多个所述可执行任务执行完毕,触发将所述任务阻塞队列中的可执行任务加入至所述运行队列。

在一些实施例中,所述运行队列还用于:

在经过第一预设时间之后,判断所述运行队列的任务数量是否小于所述预设并发阈值;

若是,将所述可执行任务从所述暂停队列中移除,并加入至所述运行队列。

在一些实施例中,所述运行队列还用于:

当未到达所述第一预设时间和/或检测到满足所述可执行任务运行成功的条件时,重置所述可执行任务的执行状态;

判断所述运行队列的任务数量是否小于所述预设并发阈值;

若是,直接将所述可执行任务从所述暂停队列中移除,并加入至所述运行队列。

在一些实施例中,所述运行队列还用于:

判断任务阻塞队列是否处于空状态;

若否,根据所述预设并发阈值,触发将所述阻塞队列中的所述可执行任务加入至所述运行队列,并执行所述可执行任务。

在一些实施例中,所述任务加载器还用于:

从数据库加载任务列表;

周期性扫描所述任务列表中的所述可执行任务,所述任务列表中的每一所述可执行任务包括一个任务编号。在一些实施例中,所述任务阻塞队列用于进栈所述可执行任务,包括:

判断所述任务阻塞队列中可执行任务是否处于满额状态;

若否,判断所述可执行任务的任务编号与所述任务阻塞队列中可执行任务的任务编号是否相同;

若否,进栈所述可执行任务。

在一些实施例中,所述任务加载器用于加载可执行任务,包括:

判断所述阻塞队列是否处于满额状态;

若否,加载所述可执行任务至所述任务阻塞队列。

第二方面,本发明实施例还提供了一种非易失性计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使电子设备能够实现如上任一项所述的任务队列运行装置。

本发明实施例的有益效果是:区别于现有技术的情况下,本发明实施例提供的一种任务队列运行装置。通过任务运行器根据预设并发阈值,运行所述可执行任务,从而避免了服务器负载过大;当所述可执行任务运行失败时,暂停所述可执行任务的运行,从而避免了可执行任务重复执行,进而避免了服务器资源浪费。

附图说明

一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。

图1是本发明实施例提供的一种应用于任务队列运行装置的示例性系统结构示意图;

图2是本发明实施例提供的一种任务队列运行装置的结构示意图;

图3是本发明实施例提供的一种任务运行器的结构示意图;

图4是本发明实施例提供的一种运行队列与暂停队列的运行示意图;

图5是本发明实施例提供的一种服务器的结构示意图。

具体实施方式

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

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

请参阅图1,为本发明实施例提供的一种应用于任务队列运行装置的示例性系统结构示意图。如图1所示,该系统结构300包括终端设备11和服务器12。其中,所述终端设备11与所述服务器12通过通信网络进行交互,所述通信网络是用于在所述终端设备11和所述服务器12之间提供通信链路的介质,其可以包括各种连接类型,比如有线、无线通信链路或者光纤电缆等。

所述终端设备11可以是有显示屏并且支持网页浏览的各种电子设备,其包括但不限于智能手机、平板电脑、智能手表、电子阅读器等。

所述服务器12包括任务队列运行装置100和数据库200,所述任务队列运行装置100支持多个线程,用于处理来自于所述终端设备11的任务请求。所述数据库200按照优先级关系可以划分为主数据库、从数据库,为提高服务器的处理效率,所述主数据库用于写操作,所述从数据库用于读操作,为提高数据安全性,将所述主数据库或所述从数据库中的数据备份至备份数据库。

在本实施例中,所述服务器12为任务服务器或包括任务服务器的服务器集群,所述服务器集群还包括应用服务器、均衡服务器、缓存服务器、数据库服务器等。

在一些实施例中,通过在应用服务器和数据库服务器之间增加中间层dal,所述中间层dal采用缓冲队列和连接池设计,所述缓冲队列用于存储等待中的所述任务请求,当所述连接池存在空闲连接,触发从所述缓冲队列获取一个所述任务请求,有效降低了服务器的压力。或者,通过在缓存服务器和数据库服务器之间增加中间层dal,所述缓存服务器用于缓存所述任务请求,当请求更新数据时,更新缓存,并将需要修改的数据写入中间层dal,当所述连接池存在空闲连接,触发从所述缓冲队列获取一个所述任务请求,有效降低了服务器的压力。

所述线程位于线程池中,所述线程池的主要目的是管理和协调线程,使空闲的线程得到调用从而完成实时任务的处理,线程池任务处理方法包括线程池主线程的设计、空闲线程的创建、在任务队列中查找待处理的任务、为任务分配空闲线程、释放销毁空闲线程、线程池工作状态的检测等。

具体的,所述终端设备11用于向所述服务器12发送任务请求,并接收所述服务器12返回的任务应答。所述任务请求被写入文件所述数据库200,所述任务请求以任务列表的方式存储于所述数据库200,用户可以对所述数据库200中的数据进行加载、运行等操作。

请参阅图2,本发明实施例提供的一种任务队列运行装置的结构示意图。如图2所示,所述任务队列运行装置100包括任务加载器10、任务阻塞队列20、任务触发器30以及任务触发器40。

所述任务加载器10用于进栈所述可执行任务。

其中,所述任务加载器10用于加载可执行任务,包括:判断所述阻塞队列20是否处于满额状态;若否,加载所述可执行任务至所述任务阻塞队列20。

进一步的,所述任务加载器10还用于:从数据库加载任务列表;周期性扫描所述任务列表中的所述可执行任务,所述任务列表中的每一所述可执行任务包括一个任务编号。

可以理解,所述可执行任务为用户在终端设备发起的任务请求,所述可执行任务以任务列表的形式存储于数据库,当所述可执行任务执行存储动作时,所述数据库为所述可执行任务动态分配唯一一个任务编号,用以标识所述可执行任务。

具体的,任务加载器10从数据库将所述任务列表加载至服务器的内存中,周期性扫描所述任务列表,查找符合条件的可执行任务。例如,将扫描周期设置为10s,遍历所述任务列表,当所述阻塞队列20处于未满额状态,加载当前扫描到的所述可执行任务至任务阻塞队列20;当所述任务列表中的可执行任务全部执行完毕,扫描不到可执行任务,此时,每10s轮询一次所述任务列表。

所述任务阻塞队列20用于进栈所述可执行任务。

其中,所述任务阻塞队列20用于进栈所述可执行任务,包括:判断所述任务阻塞队列20中可执行任务是否处于满额状态;若否,判断所述可执行任务的任务编号与所述任务阻塞队列20中可执行任务的任务编号是否相同;若否,进栈所述可执行任务。

可以理解,在多线程的处理环境中,通过任务阻塞队列20可以实现数据共享,将任务加载器10看作是“生产者”,将任务阻塞队列20看做是“消费者”,任务加载器10将数据(即所述可执行任务)给到任务阻塞队列20,利用任务阻塞队列20预设设置的工作方式传递数据,从而解决了任务加载器10与任务阻塞队列20之间数据共享的问题。当任务阻塞队列20进栈可执行任务的速度大于任务阻塞队列20的传输速度,利用任务阻塞队列20的阻塞特性,使得所述可执行任务的数量受限于任务阻塞队列20的容量,当任务阻塞队列20进栈可执行任务的数量大于任务阻塞队列20的容量,任务阻塞队列20呈现出消费者端阻塞特性,当任务阻塞队列20可执行任务的数量为0,任务阻塞队列20呈现出生产者端阻塞特性。

所述可执行任务从任务阻塞队列20的一端输入,任务阻塞队列20的另一端输出,先进栈的可执行任务优先出栈,后进栈的可执行任务依次出栈,符合任务运行的公平性,适用于一般事件的处理。在一些实施中,后进栈的可执行任务优先出栈,先进栈的可执行任务依次出栈,适用于时间优先事件的处理。

需要说明的是,在任务阻塞队列20的长度存在余量的情况下,判断当前扫描到的可执行任务的任务编号是否已存在,即判断当前扫描到的可执行任务的任务编号与任务阻塞队列20中可执行任务的任务编号是否相同,若不同,则进栈所述可执行任务,避免了可执行任务被重复执行,提升了任务处理效率。例如,任务阻塞队列20的容量或长度为10,当前任务阻塞队列20包括8个等待中的可执行任务,8个等待中的可执行任务的任务编号分别为001、002、003、004、005、006、007、008,假设当前扫描到的可执行任务的任务编号为010,其与8个等待中的可执行任务的任务编号均不同,且任务阻塞队列20处于未满额状态,所以,将当前扫描到的可执行任务进栈至任务阻塞队列20。

所述任务触发器30用于向所述任务阻塞队列20发送触发信号,以使所述任务阻塞队列20将所述可执行任务作出栈处理。

可以理解,任务触发器30相当于任务获取器,从任务阻塞队列20获取符合条件的可执行任务至所述任务运行器40。任务触发器30是连接任务阻塞队列20和任务运行器40的中间模块,需要满足任务阻塞队列20的获取条件以及任务运行器40的运行条件,才能向所述任务阻塞队列20发送触发信号,以使所述任务阻塞队列20将所述可执行任务作出栈处理。其中,任务阻塞队列20的获取条件为任务阻塞队列20中存在可执行任务,即任务阻塞队列20不处于空状态。

所述任务运行器40用于根据预设并发阈值,运行所述可执行任务,当所述可执行任务运行失败时,暂停所述可执行任务的运行。

请一并参阅图3,所述任务运行器40包括运行队列401与暂停队列402。

如图4所示,所述运行队列401用于根据预设并发阈值,运行所述可执行任务,当所述可执行任务运行失败时,所述运行队列401将所述可执行任务加入所述暂停队列402。

其中,所述运行队列401用于根据预设并发阈值,运行所述可执行任务,包括:所述运行队列401用于判断所述运行队列401的任务数量是否小于所述预设并发阈值;若是,触发将所述任务阻塞队列20中的可执行任务加入至所述运行队列401;若否,等待所述运行队列401中的一个或多个所述可执行任务执行完毕,触发将所述任务阻塞队列20中的可执行任务加入至所述运行队列401。

所述运行队列401还用于:判断任务阻塞队列20是否处于空状态;若否,根据所述预设并发阈值,触发将所述阻塞队列20中的所述可执行任务加入至所述运行队列401,并执行所述可执行任务。

需要说明的是,所述运行队列401的长度一般小于任务阻塞队列30的长度,满足等待中的可执行任务的数量大于可执行任务的并发量,避免运行队列401长时间的空置,提升服务器资源的利用率。

假设服务器支持n个线程在同一时刻运行,则所述预设并发阈值为n,所述预设并发阈值为所述运行队列401的阈值,用以控制所述运行队列401或所述服务器的并发量,因此,根据服务器的带负载能力设置所述预设并发阈值,可以保证服务器的正常处理能力,避免负载过大时,导致服务器速度缓慢,甚至是系统崩溃。可以将所述预设并发阈看做是一个开关阀门,与客户端-服务器系统框架的冗余设计不同,任务阻塞队列20与预设并发阈值的设计在任务阻塞队列20的阻塞策略的基础上,进一步实现基于服务器自身的内部缓存,并提升了服务器的处理速度。

可以理解,所述运行队列401相当于一个任务池,可执行任务在所述运行队列401中运行,每一个所述可执行任务的运行耗时可能不同,则每一个所述可执行任务运行完毕的时刻不同,只有当至少一个所述可执行任务运行完毕,所述运行队列401才具有空闲位置。所述运行队列401中的任务数量最大值等于所述预设并发阈值,所述运行队列401中的任务数量可以等于或者小于所述预设并发阈值,当任务阻塞队列20的长度大于所述预设并发阈值时,则所述运行队列401中的任务数量(即所述运行队列401的并发量)可能等于所述预设并发阈值n。当所述运行队列401的并发量等于所述预设并发阈值n时,主线程休眠第二预设时间,在经过所述第二预设时间之后,轮询所述运行队列401,等待所述运行队列401中的一个或多个所述可执行任务执行完毕,触发将所述任务阻塞队列20中的可执行任务加入至所述运行队列401。进一步的,所述运行队列还用于:在经过第一预设时间之后,判断所述运行队列401的任务数量是否小于所述预设并发阈值;若是,将所述可执行任务从所述暂停队列402中移除,并加入至所述运行队列401。

例如,在拉取订单的过程中,账单文件晚来或者是其他原因,导致所述运行队列401中的一个可执行任务运行失败,判断所述运行队列401的任务数量是否小于所述预设并发阈值,若是,将所述可执行任务加入至所述运行队列401,在经过第一预设时间之后,判断所述运行队列401的任务数量是否小于所述预设并发阈值,若是,将所述可执行任务从所述暂停队列402中移除,并加入至所述运行队列401,除了可以避免运行失败的可执行任务重复执行,占用cpu处理资源,还可以避免可执行任务的漏执行。

如图4所示,所述运行队列401包括n个可执行任务:可执行任务1、可执行任务2……可执行任务n,所述暂停队列402包括1个可执行任务:可执行任务k。可以理解,可执行任务k是从任务阻塞队列30出栈至运行队列401的,并在运行队列401中运行,在可执行任务k运行失败时,运行队列401将可执行任务k移动至暂停队列402,可执行任务k在暂停队列402中经过第一预设时间t之后,判断运行队列401的任务数量是否小于所述预设并发阈值,若是,将可执行任务k从暂停队列402中移除,并加入至运行队列401,从而避免了可执行任务重复执行,进而避免了服务器资源浪费,且不影响其余可执行任务的运行,进一步提升了处理效率,所述第一预设时间的设置提升了可执行任务的运行的正确性,尤其是解决账单晚来导致的运行失败的问题。

在一些实施例中,所述运行队列401还用于:当未到达所述第一预设时间和/或检测到满足所述可执行任务运行成功的条件时,重置所述可执行任务的执行状态;判断所述运行队列401的任务数量是否小于所述预设并发阈值;若是,直接将所述可执行任务从所述暂停队列402中移除,并加入至所述运行队列401。

例如,在运维人员人工监控的情况下,虽然不满足所述第一预设时间的要求,但可人工重置所述可执行任务的执行状态,将所述可执行任务的执行状态重置为“人工初始化”,根据该“人工初始化”标记,进入判断所述运行队列401的任务数量是否小于所述预设并发阈值的步骤,从而降低了暂停队列402中的可执行任务的等待时间,提升了服务器的处理效率。

还例如,在拉取订单的过程中,由于账单文件晚来导致所述可执行任务运行失败,移入至所述暂停队列402,在运维人员人工监控的情况下,虽然不满足所述第一预设时间的要求,检测到满足所述可执行任务运行成功的条件时,即检测到账单文件已经到来,可人工重置所述可执行任务的执行状态,将所述可执行任务的执行状态重置为“人工初始化”,根据该“人工初始化”标记,进入判断所述运行队列401的任务数量是否小于所述预设并发阈值的步骤,从而降低了暂停队列402中的可执行任务的等待时间,提升了服务器的处理效率。本发明实施例提供的一种任务队列运行装置,通过任务运行器根据预设并发阈值,运行所述可执行任务,从而避免了服务器负载过大;当所述可执行任务运行失败时,暂停所述可执行任务的运行,从而避免了可执行任务重复执行,进而避免了服务器资源浪费。

请参阅图5,本发明实施例提供的一种服务器的结构示意图。其中,所述服务器500为提供计算服务的设备,所述服务器500的构成包括处理器、硬盘、内存、系统总线等。如图5所示,所述服务器500包括:一个或多个处理器501以及存储器502,图5中以一个处理器501为例。

处理器501和存储器502可以通过总线或者其他方式连接,图5中以通过总线连接为例。

存储器502作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的任务队列运行装置对应的程序指令/模块(例如,附图3所示的各个模块)。处理器501通过运行存储在存储器502中的非易失性软件程序、指令以及模块,从而执行服务器500的各种功能应用以及数据处理。

存储器502可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据任务队列运行装置的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器502可选包括相对于处理器501远程设置的存储器,这些远程存储器可以通过网络连接至任务队列运行装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述一个或者多个模块存储在所述存储器502中,当被所述一个或者多个处理器501执行时,实现例如图2中的各模块和各单元的功能。

本发明实施例提供了一种非易失性计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,实现例如图3中的各模块和各单元的功能。

本发明实施例提供了一种计算机程序产品,包括存储在非易失性计算机可读存储介质上的计算程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,实现例如图2中的各模块和各单元的功能。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可执行包括如上述实施例中的全部或部分流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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