基于信号量的流量控制方法、装置、计算机设备和存储介质与流程

文档序号:17720055发布日期:2019-05-22 02:05阅读:151来源:国知局
基于信号量的流量控制方法、装置、计算机设备和存储介质与流程

本申请涉及计算机技术领域,特别是涉及一种基于信号量的流量控制方法、装置、计算机设备和存储介质。



背景技术:

信号量(semaphore),是在多线程环境下使用的一种工具,它负责协调各个线程,以保证线程能够正确、合理的使用公共资源。在进入一个关键代码段之前,线程必须获取一个信号量,一旦该关键代码段被执行完成了,那么该线程必须释放信号量。例如,当目标线程需要执行某段关键代码段时,由于没有现有的信号量,因此必须等待,直到有其他线程释放信号量,该目标线程才能使用资源执行关键代码段。目前大部分的任务都是使用线程池来控制并发和资源调配,一般分配好之后很难进行灵活的调整和监控。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够实现多通道任务流量的灵活调整的基于信号量的流量控制方法、装置、计算机设备和存储介质。

一种基于信号量的流量控制方法,所述方法包括:

获取待处理任务,判断所述待处理任务对应的任务类型;

获取所述任务类型对应的信号量;

若所述信号量的许可已满,则获取所述信号量的许可借用配置;其中,所述许可借用配置用于描述所述信号量的借用属性和被借用属性;

若所述许可借用配置所描述的借用属性为允许借用,则查找目标信号量,所述目标信号量的许可借用配置所描述的被借用属性为允许被借用;

从所述目标信号量获取借用许可,并将所述借用许可分派给所述待处理任务;

将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可。

在一个实施例中,在所述获取所述任务类型对应的信号量之前,还包括:

获取信号量许可总数;

根据所述任务类型的优先级确定对应信号量的初始许可数,所有所述信号量的初始许可数之和不大于所述信号量许可总数;

根据所述任务类型的优先级确定对应的所述信号量的许可借用配置,所述许可借用配置包括是否需要借用和是否允许借用。

在一个实施例中,在所述若所述信号量的许可已满,则获取所述信号量的许可借用配置之后,还包括:

若所述许可借用配置所描述的借用属性为不允许借用,则将所述待处理任务标记为阻塞等待许可;

当标记为阻塞等待许可的任务数量超过设定阈值和/或等待时间超过设定阈值,则调整对应的所述信号量的初始许可数;

将所述信号量的初始许可数更新至数据库。

在一个实施例中,所述方法还包括:

监控缓存中所述信号量的第一初始许可数,当所述第一初始许可数缓存时间达到预设缓存期限时,从数据库中获取所述信号量对应的第二初始许可数;

若所述第一初始许可数小于所述第二初始许可数,则将缓存中所述第一初始许可数调整为所述第二初始许可数;

若所述第一初始许可数大于所述第二初始许可数,则获取所述信号量的空闲许可数,若所述空闲许可数小于所述第一初始许可数与所述第二初始许可数的差值,则将缓存中所述第一初始许可数调整为所述第一初始许可数与所述空闲许可数的差值;

回收所述信号量释放的许可,直至回收的许可数等于调整后的所述第一初始许可数与所述第二初始许可数之间的差值,进而将缓存中所述第一初始许可数调整为所述第二初始许可数。

在一个实施例中,所述从所述目标信号量获取借用许可,并将所述借用许可分派给所述待处理任务之后,还包括:

生成信号量第一操作记录;

从所述待处理任务中提取第一任务数据;

所述信号量第一操作记录关联所述第一任务数据;

所述将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可之后,还包括:

从任务处理结果中提取第二任务数据;

生成信号量第二操作记录,所述信号量第二操作记录关联所述第二任务数据。

一种基于信号量的流量控制装置,所述装置包括:

任务获取模块,用于获取待处理任务,判断所述待处理任务对应的任务类型;

信号量获取模块,用于获取所述任务类型对应的信号量;

许可借用配置获取模块,用于若所述信号量的许可已满,则获取所述信号量的许可借用配置;

借用许可模块,用于若所述许可借用配置为需要借用,则查找所述许可借用配置为允许借用的目标信号量;

任务处理模块,用于从所述目标信号量借用许可,并将所述借用许可分派给所述待处理任务,将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可。

在一个实施例中,所述装置还包括:

阻塞许可模块,用于若所述许可借用配置为不需要借用,则将所述待处理任务标记为阻塞等待许可;

初始许可数调整模块,用于当标记为阻塞等待许可的任务数量超过设定阈值和/或等待时间超过设定阈值,则调整对应的所述信号量的初始许可数;

存储模块,用于将所述信号量的初始许可数更新至数据库。

在一个实施例中,所述装置还包括:

缓存数据更新模块,用于监控缓存中所述信号量的第一初始许可数,当所述第一初始许可数缓存时间达到预设缓存期限时,从数据库中获取所述信号量对应的第二初始许可数;若所述第一初始许可数小于所述第二初始许可数,则将缓存中所述第一初始许可数调整为所述第二初始许可数;若所述第一初始许可数大于所述第二初始许可数,则获取所述信号量的空闲许可数,若所述空闲许可数小于所述第一初始许可数与所述第二初始许可数的差值,则将缓存中所述第一初始许可数调整为所述第一初始许可数与所述空闲许可数的差值;回收所述信号量释放的许可,直至回收的许可数等于调整后的所述第一初始许可数与所述第二初始许可数之间的差值,进而将缓存中所述第一初始许可数调整为所述第二初始许可数。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述所述方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的方法的步骤。

上述基于信号量的流量控制方法、装置、计算机设备和存储介质,首先划分出多个任务类型,并为每个任务类型定义对应的信号量,赋予信号量借用属性和被借用属性;通过借用属性和被借用属性实现信号量之间许可的借用,将信号量的剩余许可借用给许可已满的信号量,实现了多通道任务流量的灵活调整,避免了一边是资源剩余,一边是资源短缺,实现资源利用最大化。

附图说明

图1为一个实施例中基于信号量的流量控制方法的应用场景图;

图2为一个实施例中基于信号量的流量控制方法的流程示意图;

图3为一个实施例中初始许可数调整所涉及的流程示意图;

图4为一个实施例中基于信号量的流量控制装置的结构框图;

图5为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的基于信号量的流量控制方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。终端102产生待处理任务,并将待处理任务发送给服务器104,服务器104对待处理任务进行有序的处理,并向终端102返回任务处理结果。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104是单点应用服务器,即是独立的服务器。

在一个实施例中,如图2所示,提供了一种基于信号量的流量控制方法,该方法应用在服务器中,用于对服务器中的所有任务的执行流量进行控制和调整。该方法具体包括以下步骤:

步骤202,获取待处理任务,判断待处理任务对应的任务类型。

服务器用于对终端提供服务,为了响应终端用户的各种操作,服务器需要进行各种数据处理和运算。服务器所做出的数据处理和运算成为服务器所需要执行的任务。

需要说明的是,本实施例是基于单点应用服务器(即一台应用服务器)发出的待执行任务而言的。

具体为,预先将单点服务器中的所有任务划分成不同的任务类型,划分的任务类型的粒度可根据具体的需求而定。在进行任务类型划分时,可将一个任务划分出多个任务类型,也可将多个任务定义为同一种任务类型。将一个任务划分出多个任务类型,如对于查询征信报告的任务,将来自第一查询主体集合且为线上查询的任务定义为第一任务类型、将来自第一查询主体集合且为线下查询的任务定义为第二类型、将来自第二查询主体集合且为线上查询的任务定义为第三类型,将自第二查询主体集合且为线下查询的任务定义为第四类型。还可以将任务划分为重要任务和普通任务,将所有重要任务定义为同一任务类型,对该任务类型定义较高的优先权,以便通过信号量为该任务类型定义流量较多的信号量,使得这些关键的任务能够及时优先被处理。

步骤204,获取任务类型对应的信号量。

预先定义每种任务类型对应的信号量,并将定义的信号量存储到数据库,并随着流量控制,将数据库中的信号量信息更新到缓存中,服务器从缓存中获取任务类型对应的信号量。

信号量的作用与信号灯的作用类似,信号灯用于控制相应车道的流量,而信号量用于控制对应任务类型的流量。

本实施例中,定义信号量包括定义初始许可数、信号量的许可借用配置。初始许可数是指信号量许可放行的最大的流量,如信号量的初始许可数是100,其含义是,服务器最多可同时处理该信号量对应的任务类型的任务数量为100。若某一时刻,对应的任务类型的任务数量为200,信号量只能给予排序在前100的任务获取许可,服务器处理获取许可的任务,剩余100个任务则等待获取许可,被许可的其中一个任务执行完成后,将释放一个许可,信号量获取该释放的许可,允许下一个任务获取许可,服务器处理获取许可的任务。

信号量的许可借用配置包括:是否需要借用和是否允许借用。其中,需要借用即为当本身信号量许可已满时,可向其他信号量借用许可。允许借用即为是否将自身的许可借用给需要借用的信号量。

举例来说,任务类型1→信号量1(许可数为100、需要借用、不允许借用);任务类型2→信号量2(许可数为50、需要借用、允许借用);任务类型3→信号量3(许可数为50、不需要借用、允许借用)。基于上述定义,信号量2可将自身许可借用给信号量1,但信号量1的许可不外借。信号量3不能向其他信号量借用许可,但可以将自身的信号量借用给信号量1和信号量2。

步骤206,若信号量的许可已满,则获取信号量的许可借用配置,其中,许可借用配置用于描述信号量的借用属性和被借用属性。

服务器接收到一个待处理任务时,首先根据待处理任务的任务数据确定任务类型,然后根据预先定义的任务类型与信号量之间的对应关系,获取该待处理任务对应的信号量。

服务器获取对应信号量的当前许可状态,信号量的当前许可状态包括剩余许可数,借出的许可数和借入的许可数。其中,剩余许可数是信号量的初始许可数减去被占用的许可数。若信号量的初始许可数全部被占用,即剩余许可数为0,则信号量的许可已满。

信号量许可借用配置中的借用属性描述的是是否允许借用其他信号量的许可。被借用属性描述的是是否允许其他信号量借用许可。

步骤208,若许可借用配置所描述的借用属性为允许借用,则查找目标信号量,目标信号量的许可借用配置所描述的被借用属性为允许被借用。

步骤210,从目标信号量获取借用许可,并将借用许可分派给待处理任务。

步骤212,将待处理任务添加至线程资源中,直至任务处理完成,释放借用许可。

若待处理任务对应的信号量的许可已满,获取信号量的许可借用配置。若信号量的借用属性为允许借用,即允许从其他信号量获取借用许可。服务器查找是否存在可借用许可的目标信号量。目标信号量需要具有如下两个条件,其一为目标信号量的被借用属性为允许被借用,其二目标信号量尚有空闲许可。若查找到满足上述条件的目标信号量,则从目标信号量借用其空闲许可。将从目标信号量借用的空闲许可命名为借用许可。

待处理任务对应的信号量从目标信号量中获取借用许可后,将借用许可分配给该待处理任务,以使该待处理任务的状态为获取许可。服务器处理获取许可的任务。

目标信号量将自身许可借出后,目标信号量的剩余许可数减少1,借出信号量数增加1,待处理任务对应的信号量的借入许可数增加1。在一个实施例中,将每个借入许可关联许可来源信号量标识,每个借出许可关联去处信号量标识。

举例来说,待处理任务对应信号量1,信号量1剩余许可数为0,借出许可为0,借入许可为0。信号量2的剩余许可数为20,借出许可数为10,借入许可数为0。为了处理待处理任务,信号量1从信号量2中借用一个许可。借用后信号量1的剩余许可数为0,借出许可数为0,借入许可数为:1,来自信号量2。信号量2的剩余许可数为19,借出许可数为11(信号量1借出许可1个…),借入许可数为0。

当信号量1对应的任一任务执行完成后,释放的许可归还给信号量2。在一个实施例中,还可以是,当借用许可对应的待处理任务完成后,将借用许可归还给来源信号量。

在一个实施例中,若有多个任务等待执行,可从其他信号量借用多个许可,将多个借用许可分派给多个待处理任务。任务完成后释放借用许可给来源信号量。

本实施例中,划分出多个任务类型,定义每个任务类型对应的信号量,通过信号量控制每种任务类型可获取的资源,对于比较重要的任务类型定义较大的信号量初始值,以使比较重要的任务获取更多的资源以实现资源优化。此外,本实施例中,为信号量赋予借用属性,通过借用属性实现信号量之间许可的借用,实现了多通道任务流量的灵活调整,避免了一边是资源剩余,一边是资源短缺,实现资源利用最大化。

在一个实施例中,在发生信号量许可借用时,在借用许可的时候生成一条信号量操作记录,且在释放借用许可时生成另一条信号量操作记录。信号量操作记录包括借用许可时间或释放借用许可时间、借用双方。此外,借用许可时的信号量操作记录还包括获取借用许可的任务对应的任务信息,包括任务标识,单号,输入值。释放许可时的信号量操作记录包括任务结果信息,包括任务标识、单号、输出值、处理时间等。

本实施例中,针对信号量的每一次借用许可生成信号量操作记录,并记录与该信号量操作记录相关的任务信息。通过多通道信号量的许可有据可查,当系统异常报警时,根据信号量操作记录可快速定位出异常任务。

每个任务类型对应的信号量可以人为配置,但当划分的任务类型较多时,人工对每个信号量进行配置,效率低下。本实施例提供了一种信号量配置方法,实现了对众多信号量的快速配置。具体为:获取信号量许可总数;根据预先定义的任务类型的优先级确定每个任务类型对应的信号量的初始许可数,其中,所有任务类型对应的信号量的初始许可数之和不大于信号量许可总数;根据任务类型的优先级确定对应的信号量的许可借用配置,其中,许可借用配置包括借用属性和被借用属性的配置。

更具体的,根据软件和硬件条件确定需要可调配的执行资源。可在自动生成信号量信息之前录入执行资源信息,服务器根据录入执行资源信息计算信号量总数。根据执行资源计算信号量总数时,可先计算所有执行资源执行任一种任务类型的任务时,能够同时处理的最大任务数量,然后,根据每一种任务类型对应的最大任务数量计算信号量许可总数。

举例来说,任务类型包括任务类型1和任务类型2,所有执行资源最多能够同时处理任务类型1对应的任务数量为200,所有执行资源最多能够同时处理任务类型2对应的任务数量为150,信号量许可总数最大不可超过200,最小不得低于150。可以是所有任务数量的均值。

确定信号量许可总数后,根据任务类型的优先级确定每个任务类型对应的信号量初始许可数。进一步的,通过历史任务处理记录,计算每种任务类型的任务量比例,基于任务量比例以及任务类型的优先级确定每个任务类型对应的信号量的初始许可数。如任务类型1的优先级高于任务类型2,任务类型1与任务类型2的任务量比例为2:1,许可总数为300,先按照任务量比例确定初始许可数,在根据优先级对确定的初始许可数进行调整。如按照任务量比例确定任务类型1对应的初始许可数为200,任务类型2对应的初始许可数为100,由于任务类型1具有较高的优先级,可上调任务类型1对应的初始许可数,如上调为250。

最后根据任务类型的优先级确定对应的信号量的许可借用配置。在一个实施例中,可以将优先级高的任务类型对应的信号量的借用属性配置为允许借用,被借用属性配置为不允许被借用。将优先级低的任务类型对应的信号量的借用属性设置为不允许借用,被借用属性配置为允许被借用。还可以根据任务类型的优先级确定允许借用上限和允许被借用上限。

本实施例中,为优先级较高的任务类型配置更多的许可数,更有的借用条件,使得优先级较高的任务能够优先得到处理。

在一个实施例中,若待处理任务对应的信号量的许可已满,且该待处理任务对应的信号量的借用属性为不允许借用,即该信号量不能够向其他信号量借用许可,则将该待处理标记为阻塞等待许可。相应的,再此之后产生的待处理任务也标记为阻塞等待许可。

监听阻塞等待许可的待处理任务数量以及阻塞等待的时间(仅监听排在首位的阻塞等待许可的待处理任务等待的时间),若阻塞等待许可的待处理任务数量超过设定的阈值,或者最初的待处理任务的等待时间超过设定阈值,或者待处理任务数量和等待时间均超过相应的设定值,则服务器增加相应信号量的初始许可数,或者将相应信号量从不允许借用许可配置调整为允许借用许可配置,或者增加相应信号量的允许借用许可上限。

相应的,调整不饱和信号量对应的信号量配置。若信号量的剩余许可数长时间处于高值,则该信号量为不饱和信号量。调整不饱和信号量的初始许可数以及许可借用配置。具体为,减少不饱和信号量的初始许可数,将不饱和信号量的需要借用配置为不允许借用,将不允许被借用配置为允许被借用。

服务器将更改后的信号量配置存储在数据库中。

本实施例中,在信号量动态调配多通道流量时,监听每个通道的实时任务处理状态,根据实时的任务处理状态动态调整信号量的配置,使得信号量的流量控制更加灵活。

在一个实施例中,如图3所示,基于信号量的流量调整方法,还包括如下步骤:

步骤302,监控缓存中信号量的第一初始许可数,当第一初始许可数缓存时间达到预设缓存期限时,从数据库中获取信号量对应的第二初始许可数。

服务器将定义的信号量固定存储在数据库中,当进行流量控制时,服务器获取任务类型对应的信号量,首先查找缓存中是否存储有信号量信息,若否,则从数据库中获取信号量信息,并将信号量信息缓存到缓存中。

预先定义信息在缓存中的缓存周期,如10分钟。服务器监控缓存中的信号量信息,包括信号量初始许可数、信号量许可借用配置信息等。当信号量信息达到预设缓存期限(10分钟),服务器从数据库中拉取最新的信号量信息,将最新的信号量信息存储在缓存中,同时监控最新的信号量信息缓存时间是否达到预设缓存周期,若是,再从数据库中更新最新的信号量信息。

在流量监控时,服务器会根据事实上的任务处理状态动态调整信号量的配置,并将调整后的信号量配置(包括信号量初始许可数、信号量许可借用配置信息)存储在数据库中,而缓存中每隔设定时间周期从数据库中获取最新的信号量配置。

本实施例中,第一初始许可数为缓存中的初始许可数,第二初始许可数是数据库中的初始许可数。

步骤304,若第一初始许可数小于第二初始许可数,则将缓存中第一初始许可数调整为第二初始许可数。

缓存到期时,服务器从数据库中读取信号量的初始许可数,并比较数据库终的初始许可数与缓存中的初始许可数,若缓存中的初始许可数小于数据库中的初始许可数(也即是服务器增加了信号量的初始许可数),则直接将缓存中的初始许可数调整为数据库中的初始许可数。相应信号量的当前空闲许可数增加。

举例来说,信号量1在缓存中的初始许可数为100,数据库的初始许可数为200,信号量1当前空闲许可数为0,缓存到期时,更新缓存数据后,缓存中的初始许可数为200,信号量1当前空闲许可数为从缓存中提取的初始许可数(200)与当前被占用许可数之间的差值,此处为100。

步骤306,若第一初始许可数大于第二初始许可数,则获取信号量的空闲许可数,若空闲许可数小于第一初始许可数和第二初始许可数的差值,则将缓存中第一初始许可数调整为第一初始许可数与空闲许可数的差值。

缓存到期时,服务器从数据库中读取信号量的初始许可数,并比较数据库终的初始许可数与缓存中的初始许可数,若缓存中的初始许可数大于数据库中的初始许可数(也即是服务器较少了信号量的初始许可数),则需要回收信号量的许可数,此时,先获取信号量的当前空闲许可数,若当前空闲许可数大于或者等于较少的初始许可数,则直接将缓存中的初始许可数调整为数据库中的初始许可数。若当前空闲许可数小于减少的初始许可数,则将缓存中的初始许可数调整为当前缓存中的初始许可数与当前空闲许可数的差值。

举例来说,信号量1在缓存中的初始许可数为100,数据库的初始许可数为50,信号量1当前空闲许可数为30,缓存到期时,需要将缓存中的初始许可数从100变更到50,需要回收50个空闲许可,而此时,空闲许可数仅为30,则先回收39个空闲许可,即将缓存中的初始许可数调整为100-30,即70。

步骤308,回收信号量释放的许可,直至回收的许可数等于调整后的第一初始许可数与第二初始许可数之间的差值,进而将缓存中第一初始许可数调整为第二初始许可数。

接下来,服务器继续回收信号量空闲许可,直至回收的空闲许可为步骤308中首次调整后的缓存中的初始许可数与数据库中的初始许可数之间的差值。

如将缓存中的初始许可数调整到70后,继续回收空闲许可,直至再回首20个空闲许可(70与数据库中的初始许可数50之间的差值),进而将缓存中的初始许可数调整为数据库中的初始许可数50,完成缓存中数据的更新。

本实施例中,给出了信号量初始许可值减少或者增加时,缓存中的数据更新方法,实现了在不影响信号量实时动态控制多通道业务流量的情况下,无缝更改信号量的配置项。

应该理解的是,虽然图2和3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2和3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图4所示,提供了一种基于信号量的流量控制装置,包括:

任务获取模块402,用于获取待处理任务,判断所述待处理任务对应的任务类型。

信号量获取模块404,用于获取所述任务类型对应的信号量。

许可借用配置获取模块406,用于若所述信号量的许可已满,则获取所述信号量的许可借用配置,其中,所述许可借用配置用于描述所述信号量的借用属性和被借用属性。

借用许可模块408,用于若所述许可借用配置所描述的借用属性为允许借用,则查找目标信号量,所述目标信号量的许可借用配置所描述的被借用属性为允许被借用。

任务处理模块410,用于从所述目标信号量获取借用许可,并将所述借用许可分派给所述待处理任务,将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可。

在一个实施例中,基于信号量的流量控制装置,还包括:信号量配置模块,用于获取信号量许可总数;根据所述任务类型的优先级确定对应信号量的初始许可数,所有所述信号量的初始许可数之和不大于所述信号量许可总数;根据所述任务类型的优先级确定对应的所述信号量的许可借用配置。

在一个实施例中,基于信号量的流量控制装置,还包括:

阻塞许可模块,用于若所述许可借用配置所描述的借用属性为不允许借用,则将所述待处理任务标记为阻塞等待许可。

初始许可数调整模块,用于当标记为阻塞等待许可的任务数量超过设定阈值和/或等待时间超过设定阈值,则调整对应的所述信号量的初始许可数。

存储模块,用于将所述信号量的初始许可数更新至数据库。

在一个实施例中,基于信号量的流量控制装置,还包括:缓存数据更新模块,用于监控缓存中所述信号量的第一初始许可数,当所述第一初始许可数缓存时间达到预设缓存期限时,从数据库中获取所述信号量对应的第二初始许可数;若所述第一初始许可数小于所述第二初始许可数,则将缓存中所述第一初始许可数调整为所述第二初始许可数;若所述第一初始许可数大于所述第二初始许可数,则获取所述信号量的空闲许可数,若所述空闲许可数小于所述第一初始许可数与所述第二初始许可数的差值,则将缓存中所述第一初始许可数调整为所述第一初始许可数与所述空闲许可数的差值;回收所述信号量释放的许可,直至回收的许可数等于调整后的所述第一初始许可数与所述第二初始许可数之间的差值,进而将缓存中所述第一初始许可数调整为所述第二初始许可数。

在一个实施例中,任务处理模块,还用于生成信号量第一操作记录;从所述待处理任务中提取第一任务数据;所述信号量第一操作记录关联所述第一任务数据;

在所述将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可之后,从任务处理结果中提取第二任务数据;生成信号量第二操作记录,所述信号量第二操作记录关联所述第二任务数据。

关于基于信号量的流量控制装置的具体限定可以参见上文中对于基于信号量的流量控制方法的限定,在此不再赘述。上述基于信号量的流量控制装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储信号量配置数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于信号量的流量控制方法。

本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取待处理任务,判断所述待处理任务对应的任务类型;获取所述任务类型对应的信号量;其中,所述许可借用配置用于描述所述信号量的借用属性和被借用属性;若所述许可借用配置所描述的借用属性为允许借用,则查找目标信号量,所述目标信号量的许可借用配置所描述的被借用属性为允许被借用;从所述目标信号量获取借用许可,并将所述借用许可分派给所述待处理任务;将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取信号量许可总数;根据所述任务类型的优先级确定对应信号量的初始许可数,所有所述信号量的初始许可数之和不大于所述信号量许可总数;根据所述任务类型的优先级确定对应的所述信号量的许可借用配置。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:若所述许可借用配置所描述的借用属性为不允许借用,则将所述待处理任务标记为阻塞等待许可;当标记为阻塞等待许可的任务数量超过设定阈值和/或等待时间超过设定阈值,则调整对应的所述信号量的初始许可数;将所述信号量的初始许可数更新至数据库。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:监控缓存中所述信号量的第一初始许可数,当所述第一初始许可数缓存时间达到预设缓存期限时,从数据库中获取所述信号量对应的第二初始许可数;若所述第一初始许可数小于所述第二初始许可数,则将缓存中所述第一初始许可数调整为所述第二初始许可数;若所述第一初始许可数大于所述第二初始许可数,则获取所述信号量的空闲许可数,若所述空闲许可数小于所述第一初始许可数与所述第二初始许可数的差值,则将缓存中所述第一初始许可数调整为所述第一初始许可数与所述空闲许可数的差值;回收所述信号量释放的许可,直至回收的许可数等于调整后的所述第一初始许可数与所述第二初始许可数之间的差值,进而将缓存中所述第一初始许可数调整为所述第二初始许可数。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:生成信号量第一操作记录;从所述待处理任务中提取第一任务数据;所述信号量第一操作记录关联所述第一任务数据;所述将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可之后,还包括:从任务处理结果中提取第二任务数据;生成信号量第二操作记录,所述信号量第二操作记录关联所述第二任务数据。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取待处理任务,判断所述待处理任务对应的任务类型;获取所述任务类型对应的信号量;其中,所述许可借用配置用于描述所述信号量的借用属性和被借用属性;若所述许可借用配置所描述的借用属性为允许借用,则查找目标信号量,所述目标信号量的许可借用配置所描述的被借用属性为允许被借用;从所述目标信号量获取借用许可,并将所述借用许可分派给所述待处理任务;将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取信号量许可总数;根据所述任务类型的优先级确定对应信号量的初始许可数,所有所述信号量的初始许可数之和不大于所述信号量许可总数;根据所述任务类型的优先级确定对应的所述信号量的许可借用配置,所述许可借用配置包括是否需要借用和是否允许借用。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若所述许可借用配置所描述的借用属性为不允许借用,则将所述待处理任务标记为阻塞等待许可;当标记为阻塞等待许可的任务数量超过设定阈值和/或等待时间超过设定阈值,则调整对应的所述信号量的初始许可数;将所述信号量的初始许可数更新至数据库。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:监控缓存中所述信号量的第一初始许可数,当所述第一初始许可数缓存时间达到预设缓存期限时,从数据库中获取所述信号量对应的第二初始许可数;若所述第一初始许可数小于所述第二初始许可数,则将缓存中所述第一初始许可数调整为所述第二初始许可数;若所述第一初始许可数大于所述第二初始许可数,则获取所述信号量的空闲许可数,若所述空闲许可数小于所述第一初始许可数与所述第二初始许可数的差值,则将缓存中所述第一初始许可数调整为所述第一初始许可数与所述空闲许可数的差值;回收所述信号量释放的许可,直至回收的许可数等于调整后的所述第一初始许可数与所述第二初始许可数之间的差值,进而将缓存中所述第一初始许可数调整为所述第二初始许可数。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:生成信号量第一操作记录;从所述待处理任务中提取第一任务数据;所述信号量第一操作记录关联所述第一任务数据;所述将所述待处理任务添加至线程资源中,直至任务处理完成,释放所述借用许可之后,还包括:从任务处理结果中提取第二任务数据;生成信号量第二操作记录,所述信号量第二操作记录关联所述第二任务数据。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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