一种数据处理方法及装置

文档序号:1381403 发布日期:2020-08-14 浏览:15次 >En<

阅读说明:本技术 一种数据处理方法及装置 (Data processing method and device ) 是由 华德义 邓康华 尹强 邸帅 卢道和 于 2020-04-10 设计创作,主要内容包括:本发明公开了一种数据处理方法及装置,其中方法为:通过第一进程,竞争第一优先级顺序中最高优先级队列组的目标优先级队列;所述多个优先级队列组用于各进程共同竞争;所述各进程针对所述多个优先级队列组均有相应的优先级顺序;所述第一进程为所述各进程中的任一进程;若所述第一进程成功竞争到所述目标优先级队列,则在第一预设时长内,通过所述第一进程,处理所述目标优先级队列中的数据单元。上述方法应用于金融科技(Fintech)时,目标优先级队列可能被多个进程同时竞争,充分利用了多个进程处理能力,提升了数据处理的整体效率。(The invention discloses a data processing method and a data processing device, wherein the method comprises the following steps: competing a target priority queue of a highest priority queue group in a first priority order through a first process; the priority queue groups are used for the common competition of processes; each process has a corresponding priority order for each of the plurality of priority queue groups; the first process is any one of the processes; and if the first process successfully competes to the target priority queue, processing the data unit in the target priority queue through the first process within a first preset time length. When the method is applied to financial technology (Fintech), the target priority queue can be simultaneously competed by a plurality of processes, the processing capacity of the plurality of processes is fully utilized, and the overall efficiency of data processing is improved.)

一种数据处理方法及装置

技术领域

本发明涉及金融科技(Fintech)领域中的计算机软件领域,尤其涉及一种数据处理方法及装置。

背景技术

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。目前很多消息中间件都支持基于队列的数据处理,如Kafka,RocketMQ。

然而,目前很多队列主要着重于数据单元如何归入队列,如何处理队列中数据单元却没有过多考虑。虽然也有支持多队列的消息中间件,但目前为了保证数据单元的顺序遵从队列的顺序,进程和队列均是一对一的关系。这样难以充分利用进程处理队列中的数据单元,举例来说,一个队列相应的处理进程长时间阻塞,导致队列中的数据单元等待过久,从而导致数据处理的整体效率较低,这是一个亟待解决的问题。

发明内容

本发明提供一种数据处理方法及装置,解决了现有技术中数据处理的整体效率较低的问题。

第一方面,本发明提供一种数据处理方法,包括:通过第一进程,竞争第一优先级顺序中最高优先级队列组的目标优先级队列;所述第一优先级顺序为所述第一进程针对多个优先级队列组的组间优先级及组内的优先级队列顺序,其中,每个优先级队列组对应一个优先级;所述多个优先级队列组用于各进程共同竞争;所述各进程针对所述多个优先级队列组均有相应的优先级顺序;所述第一进程为所述各进程中的任一进程;若所述第一进程成功竞争到所述目标优先级队列,则在第一预设时长内,通过所述第一进程,处理所述目标优先级队列中的数据单元。

上述方法中,所述多个优先级队列组用于各进程共同竞争,所述各进程针对所述多个优先级队列组均有相应的优先级顺序,因此可以通过多个优先级队列组保证数据单元的处理顺序,对于所述各进程中的任一进程,如第一进程,都可以基于第一进程自身针对多个优先级队列组的组间优先级及组内的优先级队列第一优先级顺序,竞争多个优先级队列组中最高优先级队列组的目标优先级队列,从而可以实现多个优先级顺序下的错峰竞争,而目标优先级队列也可能被多个进程同时竞争,充分利用了多个进程处理能力,并在第一预设时长内,通过所述第一进程,处理所述目标优先级队列中的数据单元,从而在保证数据单元的处理顺序的基础上,提升了数据处理的整体效率。

可选的,所述通过第一进程,竞争第一优先级顺序中最高优先级队列组的目标优先级队列之前;还包括:通过所述第一进程,获取队列指针;所述队列指针为空或者为首次失败指针;所述首次失败指针为上一轮消费回合中,连续多次竞争所述多个优先级队列组的优先级队列失败的过程中首次竞争失败的优先级队列的指针;其中,消费回合指所述第一进程完整竞争所述多个优先级队列组中每个优先级队列组的每个优先级队列的一个回合;所述通过第一进程,竞争第一优先级顺序中最高优先级队列组的目标优先级队列之后;还包括:若通过所述第一进程竞争所述目标优先级队列失败,且消费回合的回合数大于1,且所述队列指针指向所述目标优先级队列,则在所述第一预设时长内,保持所述第一进程空闲;在所述第一预设时长结束后,通过所述第一进程,竞争所述目标优先级队列。

上述方法中,首先通过所述第一进程,获取队列指针,由于队列指针为空或者为首次失败指针,也就是说队列指针可能指向在上轮消费回合首次竞争失败的优先级队列的指针,若通过所述第一进程竞争所述目标优先级队列失败,且消费回合的回合数大于1,说明所述第一进程到再次竞争所述目标优先级队列时已经多次没竞争到优先级队列,也就是第一进程在占用资源竞争,却没处理数据单元,因此,在所述第一预设时长内,保持所述第一进程空闲,节约第一进程的竞争资源。

可选的,在所述第一预设时长结束后,降低所述目标优先级队列的优先级,从而更新所述第一优先级顺序;若所述最高优先级队列组中的优先级队列不为空,则通过所述第一进程,竞争更新后所述第一优先级顺序中所述最高优先级队列组的首位优先级队列;或者,若所述最高优先级队列组中的优先级队列为空,则通过所述第一进程,竞争更新后的所述第一优先级顺序中次高优先级队列组的首位优先级队列。

上述方法中,在所述第一预设时长结束后,降低所述目标优先级队列的优先级,从而更新所述第一优先级顺序,让没处理过的优先级队列更容易被处理到,并且若所述最高优先级队列组中的优先级队列不为空或不为空时,便通过所述第一进程,继续竞争更新后的所述最高优先级队列组的首位优先级队列,或者,所述最高优先级队列组之后的次高优先级队列组的首位优先级队列,从而动态调整第一优先级顺序,持续处理优先级队列。

可选的,所述第一优先级顺序是基于链表结构记录的;将所述目标优先级队列的记录从所述第一链表中删除;将所述目标优先级队列的记录添加至所述第二链表的尾位,从而降低所述目标优先级队列的优先级。

上述方式下,由于各优先级队列变化的可能性较大,而链表结构适用于非连续、非顺序的存储单元,方便存储单元的插入删除,因此通过链表结构记录第一优先级顺序,以及改变第一优先级顺序,更加高效。

可选的,所述第一进程成功竞争到所述目标优先级队列;包括:所述第一进程成功获取所述目标优先级队列的队列锁;所述在第一预设时长内,通过所述第一进程,处理所述目标优先级队列中的数据单元之后;还包括:若在第二预设时长结束后,所述第一进程未释放所述队列锁,则强制释放所述队列锁,以供所述各进程竞争;所述第二预设时长大于或等于所述第一预设时长;通过第二进程成功竞争到所述目标优先级队列。

上述方式下,所述第一进程通过成功获取所述目标优先级队列的队列锁来竞争到所述目标优先级队列,若在比第一预设时长更长的第二预设时长结束后,所述第一进程还未释放所述队列锁,可以将所述队列锁设置为空闲状态,以供所述各进程竞争,并通过第二进程成功竞争到所述目标优先级队列,从而防止所述第一进程处理某个数据单元时间过长导致之后的部分数据单元长期得不到处理。

可选的,所述第一优先级顺序按照以下方式设置:获取所述多个优先级队列组的初始优先级;根据所述多个优先级队列组任一优先级队列组的初始优先级与最大初始优先级的差值,以及所述优先级队列组的初始优先级与最小初始优先级的差值,将所述多个优先级队列组中多个初始优先级映射为所述多个优先级队列组的优先级,从而设置所述第一优先级顺序;所述最大初始优先级为所述多个优先级队列组的初始优先级中最大的优先级;所述最小初始优先级为所述多个优先级队列组的初始优先级中最小的优先级。

当所述多个优先级队列组的初始优先级较多时,那么就要记录多个优先级的队列,且队列优先级的改变时切换开销较大,上述方法下,可以将所述多个优先级队列组中多个初始优先级映射为所述多个优先级队列组的优先级,降低队列优先级的总数,且是根据所述多个优先级队列组的初始优先级与最大初始优先级的差值,以及所述优先级队列组的初始优先级与最小初始优先级的差值确定的,考虑了原有初始优先级之间的相对差距,因此调整后的优先级也保留了相对差距,从而在此基础上减少第一优先级顺序的记录开销和变化开销。

可选的,所述第一预设时长是根据运行所述第一进程所在主机的处理性能设置的;所述第一预设时长与所述主机的处理性能呈负相关。

上述方法中,由于主机的处理性能越高,处理数据单元的时长越长,那么所述第一预设时长更长时,可以在所述第一预设时长内处理更多的数据单元,从而使得每次优先级队列切换过程中,处理更多的数据单元,进一步增加整体的处理效率。

第二方面,本发明提供一种数据处理装置,包括:获取模块,用于通过第一进程,竞争第一优先级顺序中最高优先级队列组的目标优先级队列;所述第一优先级顺序为所述第一进程针对多个优先级队列组的组间优先级及组内的优先级队列顺序,其中,每个优先级队列组对应一个优先级;所述多个优先级队列组用于各进程共同竞争;所述各进程针对所述多个优先级队列组均有相应的优先级顺序;所述第一进程为所述各进程中的任一进程;处理模块,用于若所述第一进程成功竞争到所述目标优先级队列,则在第一预设时长内,通过所述第一进程,处理所述目标优先级队列中的数据单元。

可选的,所述处理模块还用于:通过所述第一进程,获取队列指针;所述队列指针为空或者为首次失败指针;所述首次失败指针为上一轮消费回合中,连续多次竞争所述多个优先级队列组的优先级队列失败的过程中首次竞争失败的优先级队列的指针;其中,消费回合指所述第一进程完整竞争所述多个优先级队列组中每个优先级队列组的每个优先级队列的一个回合;若通过所述第一进程竞争所述目标优先级队列失败,且消费回合的回合数大于1,且所述队列指针指向所述目标优先级队列,则在所述第一预设时长内,保持所述第一进程空闲。

可选的,所述处理模块还用于:在所述第一预设时长结束后,降低所述目标优先级队列的优先级,从而更新所述第一优先级顺序;若所述最高优先级队列组中的优先级队列不为空,则通过所述第一进程,竞争更新后所述第一优先级顺序中所述最高优先级队列组的首位优先级队列;或者,若所述最高优先级队列组中的优先级队列为空,则通过所述第一进程,竞争更新后的所述第一优先级顺序中次高优先级队列组的首位优先级队列。

可选的,所述第一优先级顺序是基于链表结构记录的;所述最高优先级队列组的优先级队列记录在第一链表中;所述处理模块具体用于:将所述目标优先级队列的记录从所述第一链表中删除;将所述目标优先级队列的记录添加至所述第二链表的尾位,从而降低所述目标优先级队列的优先级。

可选的,所述处理模块具体用于:所述第一进程成功获取所述目标优先级队列的队列锁;所述处理模块还用于:若在第二预设时长结束后,所述第一进程未释放所述队列锁,则将所述队列锁设置为空闲状态,以供所述各进程竞争;所述第二预设时长大于或等于所述第一预设时长;通过第二进程成功竞争到所述目标优先级队列。

可选的,所述第一优先级顺序按照以下方式设置:获取所述多个优先级队列组的初始优先级;根据所述多个优先级队列组的初始优先级与最大初始优先级的差值,以及所述优先级队列组的初始优先级与最小初始优先级的差值,将所述多个优先级队列组中多个初始优先级映射为所述多个优先级队列组的优先级,从而设置所述第一优先级顺序;所述最大初始优先级为所述多个优先级队列组的初始优先级中最大的优先级;所述最小初始优先级为所述多个优先级队列组的初始优先级中最小的优先级。

可选的,所述第一预设时长是根据运行所述第一进程所在主机的处理性能设置的;所述第一预设时长与所述主机的处理性能呈负相关。

上述第二方面及第二方面各个可选装置的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。

第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。

第四方面,本发明提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。

附图说明

图1为本申请实施例提供的一种数据处理方法可应用的架构示意图;

图2为本申请实施例提供的一种数据处理方法的步骤流程示意图;

图3为本申请实施例提供的一种数据处理方法的可选实施方式的应用场景示意图;

图4为本申请实施例提供的一种数据处理方法的可选实施方式的应用场景示意图;

图5为本申请实施例提供的一种数据处理装置的结构示意图。

具体实施方式

为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。

下面首先列出本申请中出现的一些名词的概念。

中央处理器(central processing unit,CPU)时长:指代CPU为执行一个进程所花费的时长,在一些分时系统中经常会对CPU时长做切割,产生了CPU时间片的概念,例如常见的Unix或者Linux系统。

多级反馈队列:一种较优的优先级调度算法,主要用于进程优先级调度,保证每个优先级的进程都有机会被CPU执行,会有进程切换的开销。

消费能力:不同服务系统内的进程或者线程消费队列的时长并不固定,根据服务的配置高低和当前服务的压力大小,都在发生动态的变化,以消费队列一批数据的平均时间作为这个进程/线程的消费能力。

在金融机构(银行机构、保险机构或证券机构)在进行业务(如银行的贷款业务、存款业务等)运转过程中,为了保证数据单元的顺序遵从队列的顺序,进程和队列均是一对一的关系。这样难以充分利用进程处理队列中的数据单元,导致数据处理的整体效率较低。这种情况不符合银行等金融机构的需求,无法保证金融机构各项业务的高效运转。

在数据单元的生产能力大于进程处理数据的消费能力的系统中,常需要引入消息队列来解决负载问题,那么就有两种选择,使用功能较为完备的消息中间件或者自建处理队列。在有定制化需求的情况下,例如需要优先级队列,是消息中间件不能完全满足的,而且输入数据单元的系统可能是一个集群,是可以扩容和缩容的,但这不代表着系统的消费能力就能随之动态变化,若是对队列本身进行拆分调整,若在一个分布式集群上,势必会造成不可预知的问题。

为此,本申请提供了一种数据处理方法,图1示出了该方法可应用的一种架构场景,图2示出了该方法的具体步骤。需要说明的是,图1示出的数据处理方法可应用的一种架构场景是以多进程消费多队列为背景,其中多进程可以是同一台机器的进程,也可以是不同机器的进程,进程可以包括一个线程,也可以包括多个线程,且对一个线程也同样适用。另外,队列本质上可以是有一定存储能力和乐观锁能力的存储引擎,如数据库。本申请提供的一种数据处理方法包括如下步骤:

步骤201:通过第一进程,竞争第一优先级顺序中最高优先级队列组的目标优先级队列。

步骤202:若所述第一进程成功竞争到所述目标优先级队列,则在第一预设时长内,通过所述第一进程,处理所述目标优先级队列中的数据单元。

步骤201~步骤202中,第一预设时长实际上是第一进程处理所述目标优先级队列中的数据单元的持续时长,由于第一进程处理所述目标优先级队列中的数据单元的效率是由所述第一进程所在主机的处理性能决定的,因此,可以根据运行所述第一进程所在主机的处理性能设置第一预设时长,如所述第一预设时长与所述主机的处理性能呈负相关。举例来说,处理性能可按性能指标的不同大小划分为多个性能取值区间,对应多个等级的处理性能,第一预设时长也可以取多个时长区间中某个时长区间的一个值。那么,可以按照负相关的关系,建立多个等级的处理性能与多个时长区间映射关系,即取值区间的平均值越高的性能取值区间,对应的时长区间的平均时长越低。其中,处理性能的指标在此也不做限定,如处理性能的指标为所述第一进程所在主机的CPU主频。这样可以使得所述第一进程有更多的时长处理所述目标优先级队列中的数据单元,增加了所述第一进程单次处理所述目标优先级队列中的数据单元的个数。

步骤201~步骤202中,所述第一优先级顺序为所述第一进程针对多个优先级队列组的组间优先级及组内的优先级队列顺序,每个优先级队列组对应一个优先级。也就是说,第一优先级顺序中既规定了多个优先级队列组的组间优先级顺序,同时也规定了同一个优先级的优先级队列组内的优先级队列的优先级顺序,确定第一优先级顺序需同时满足组间和组内优先级顺序的确定。其中,所述多个优先级队列组用于各进程共同竞争;所述各进程针对所述多个优先级队列组均有相应的优先级顺序;所述第一进程为所述各进程中的任一进程。目标优先级队列可以是第一优先级顺序中最前列的优先级队列。

举例来说,如图1所示,多个优先级队列组包括优先级队列组一(优先级为10)、优先级队列组二(优先级为9)、优先级队列组三(优先级为8)…优先级队列组N,可以设置优先级数值越高(或越低)的优先级队列优先被处理,这三个优先级队列组又各自包含一个或多个优先级队列。各进程包括进程一、进程二和进程三,第一进程可以为进程一。所述各进程针对所述多个优先级队列组均有相应的优先级顺序,也就是说,各进程针对所述多个优先级队列组可以设置各自的优先级顺序,如进程一的第一优先级顺序中优先级队列组间的顺序为:优先级队列组一、优先级队列组二、优先级队列组三;进程一的第一优先级顺序中优先级队列组间的顺序为:优先级队列组二、优先级队列组一、优先级队列组三;进程一的第一优先级顺序中优先级队列组间的顺序为:优先级队列组三、优先级队列组一、优先级队列组二。

需要说明的是,一种可能的实现方式中,所述第一优先级顺序可以按照以下方式设置:

获取所述多个优先级队列组的初始优先级;根据所述多个优先级队列组的初始优先级与最大初始优先级的差值,以及所述优先级队列组的初始优先级与最小初始优先级的差值,将所述多个优先级队列组中多个初始优先级映射为所述多个优先级队列组的优先级,从而设置所述第一优先级顺序。

所述最大初始优先级为所述多个优先级队列组的初始优先级中最大的优先级;所述最小初始优先级为所述多个优先级队列组的初始优先级中最小的优先级。

举例来说,假设队列初始优先级为Pn,预设最大优先级为Pmax0=10,队列中最高最低优先级分别为Pmax,Pmin,其中n为队列编号,则按照以下方式设置每个队列优先级:

当然,也可以在初始状态时,设置进程一、进程二和进程三的优先级顺序相同,均是优先级队列组一、优先级队列组二、优先级队列组三。但是,随着各进程之间的竞争,各进程的优先级顺序会发生变化。具体的优先级变化规则,可以灵活设置。

对于多个优先级队列组的初始优先级较多的情况,记录多个优先级的队列也会较多,且队列优先级的改变时切换开销较大,通过上述可选实施方式,可以将所述多个优先级队列组中多个初始优先级映射为所述多个优先级队列组的优先级,降低队列优先级的总数,且是根据所述多个优先级队列组的初始优先级与最大初始优先级的差值,以及所述优先级队列组的初始优先级与最小初始优先级的差值确定的,考虑了原有初始优先级之间的相对差距,因此调整后的优先级也保留了相对差距,从而在此基础上减少第一优先级顺序的记录开销和变化开销。

图1示出的架构,可以通过列表记录对多个优先级队列组和每个优先级队列组中的数据单元存储。如通过队列元信息列表_queue_info_存储多个优先级队列组的信息,以及通过队列元素列表_queue_elements存储一个优先级队列组内数据单元的信息。各进程都可以在各自内存里维护一份完整的队列元信息及队列元素列表,并以一定的周期到存储引擎中做同步来增删内存的队列元信息及队列元素列表,以降低耗时,从而提高数据处理的效率。虽然维护过期的队列信息并不会使得消费进程出错,但会增加队列切换的耗时。队列元信息包含队列优先级priority等字段,这些将会在消费过程中使用到。

步骤201之前,一种可选的实施方式如下:

通过所述第一进程,获取队列指针;若通过所述第一进程竞争所述目标优先级队列失败,且消费回合的回合数大于1,且所述队列指针指向所述目标优先级队列,则在所述第一预设时长内,保持所述第一进程空闲。

所述队列指针为空或者为首次失败指针;所述首次失败指针为上一轮消费回合中,连续多次竞争所述多个优先级队列组的优先级队列失败的过程中首次竞争失败的优先级队列的指针;其中,消费回合指所述第一进程完整竞争所述多个优先级队列组中每个优先级队列组的每个优先级队列的一个回合,举例来说,第一进程完整地竞争完多个优先级队列组中每个优先级队列组,无论是否竞争成功,只要竞争过,就是一个消费回合。

上述可选的实施方式中,若通过所述第一进程竞争所述目标优先级队列失败,且消费回合的回合数大于1,说明所述第一进程到再次竞争所述目标优先级队列时已经多次没竞争到优先级队列,也就是第一进程在占用资源竞争,却没处理数据单元,因此,在所述第一预设时长内,保持所述第一进程空闲,节约第一进程的竞争资源。

举例来说,如图3所示,L为首次失败指针,设定的单次消费时长t*,其中,t*并不代表的实际花费CPU时长,其中还需要包括可能的业务逻辑时长。其次本发明里消费过程不是连续的,比如图3中,所述队列指针指向所述目标优先级队列,说明第一进程多次没有竞争到优先级队列,可能有多种情况,如第一进程的消费能力下降了,进程的数量远大于优先级队列数,竞争过于激烈,此时第一进程会在所述第一预设时长内,保持所述第一进程空闲,节约竞争资源。

步骤202中,所述第一进程成功竞争到所述目标优先级队列可以通过队列锁的方式来进行,具体来说:

所述第一进程成功获取所述目标优先级队列的队列锁。

队列可能以数据库的一张表的形式存在,队列锁可以为数据库的数据锁,第一进程成功获取到了所述目标优先级队列的队列锁,就表示第一进程已经将所述目标优先级队列在所述数据库对应的数据表锁定了。这种通过队列锁对来占用所述目标优先级队列的方式可以防止不同进程处理所述目标优先级队列中的数据单元冲突。

在此基础上,步骤202之后的另一种实施方式还可以为:

若在第二预设时长结束后,所述第一进程未释放所述队列锁,则将所述队列锁设置为空闲状态,以供所述各进程竞争;所述第二预设时长大于或等于所述第一预设时长;通过第二进程成功竞争到所述目标优先级队列。

上述可选实施方式下,在比第一预设时长更长的第二预设时长结束后,所述第一进程还未释放所述队列锁,可以将所述队列锁设置为空闲状态,以供所述各进程竞争,从而防止所述第一进程处理某个数据单元时间过长导致之后的部分数据单元长期得不到处理。

如图4所示,实际环境中是有多个进程同时运行,当第一进程正在处理优先级队列时,会有很多种不确定的情况:第一进程假死、第一进程正在进行复杂的业务逻辑处理等,这都可能造成第一进程在第二预设时长结束后仍然未释放所述队列锁。这个时候如果其他进程有空闲的资源,可以“帮助”该第一进程进行消费,所述第二预设时长可以大于或等于所述第一预设时长,一旦原先的第一进程检测到有第二进程存在(即消费冲突,即数据单元已经被消费),或者检测到所述第二预设时长大于了所述第一预设时长,就会退出切换到下一个优先级队列中。

一种可选的实施方式中,步骤202之后,可以按照以下方式变化各进程的优先级顺序:

在所述第一预设时长结束后,降低所述目标优先级队列的优先级,从而更新所述第一优先级顺序;若所述最高优先级队列组中的优先级队列不为空,则通过所述第一进程,竞争更新后所述第一优先级顺序中所述最高优先级队列组的首位优先级队列;或者,若所述最高优先级队列组中的优先级队列为空,则通过所述第一进程,竞争更新后的所述第一优先级顺序中次高优先级队列组的首位优先级队列。

为了保证竞争更新后的所述第一优先级顺序中次高优先级队列组的首位优先级队列不为更新前所述第一优先级顺序中最高优先级队列组的首位优先级队列,可以将所述目标优先级队列的优先级设置在更新前所述第一优先级顺序中次高优先级队列组的末位优先级队列,或者优先级更低的优先级队列组。

举例来说,降低所述目标优先级队列的规则为优先级降一级。分两种情况讨论,优先级队列组一仅包括优先级队列一时,所述目标优先级队列为优先级队列一,进程一的第一优先级顺序中优先级队列组的优先级分布为:优先级队列组一(优先级为10)、优先级队列组二(优先级为9)、优先级队列组三(优先级为8),优先级队列组二的首个优先级队列为优先级队列二,优先级队列组三的首个优先级队列为优先级队列三。在所述第一预设时长结束后,降低所述优先级队列一的优先级,即将优先级队列一的优先级从10改到9(可以添加到优先级队列组二的末位),在所述第一预设时长结束后,优先级队列组一中的优先级队列为空,则所述第一优先级顺序中次高优先级队列组的首位优先级队列为优先级队列组二的优先级队列二,则通过所述第一进程,竞争优先级队列二。

另一种情况中,优先级队列组一除了包括优先级队列(1-1)、优先级队列(1-2)等多个优先级队列时,所述目标优先级队列为优先级队列一,在所述第一预设时长结束后,降低所述优先级队列一的优先级,即将优先级队列一的优先级从10改到9(可以添加到优先级队列组二的末位),在所述第一预设时长结束后,优先级队列组一中的优先级队列不为空,则所述第一优先级顺序中最高优先级队列组的首位优先级队列为优先级队列(1-2),则通过所述第一进程,竞争优先级队列(1-2)。

需要说明的是,所述第一优先级顺序可以是基于链表结构记录的;具体来说,一种可能的实现方式如下:所述最高优先级队列组的优先级队列记录在第一链表中;所述次高优先级队列组的优先级队列记录在第二链表中。

降低所述目标优先级队列的优先级具体方式可以为:

将所述目标优先级队列的记录从所述第一链表中删除;将所述目标优先级队列的记录添加至所述第二链表的尾位,从而降低所述目标优先级队列的优先级。

而链表结构适用于非连续、非顺序的存储单元,方便存储单元的插入删除,因此通过链表结构记录第一优先级顺序,以及改变第一优先级顺序,更加高效。

在此基础上,如果多个优先级队列的优先级做了手动修改导致数据库中的记录的队列优先级的队列表发生变化,进程同步到这个变化后,首先会将内存里的旧的队列标记删除,从队列表中剔除,然后把变更过优先级的队列作为一个新的队列推入对应优先级链表尾部,这个时候第一进程遇到标记删除的队列,会选择性地跳过,等到下次重新构建优先队列结构的时候,旧的队列就完全被剔除了,优先级也发生了改变。

综上所述,本申请提供的一种数据处理方法,使得每个优先级队列都可能被所有的进程处理,即可以获得不同进程的CPU时长,且不会因为某个进程(消费者)问题造成队列阻塞,利用了所有消费者的消费能力。另外,本发明允许多个进程(消费者)在同一个优先级队列上发生短时间的并行处理的行为,选择消费能力较强的进程,提高队列中数据单元的处理速度。再者,本发明在保证消费能力的同时支持优先级队列动态可变,改变过程对优先级队列的消费无影响。

如图5所示,本发明提供一种数据处理装置,包括:获取模块501,用于通过第一进程,竞争第一优先级顺序中最高优先级队列组的目标优先级队列;所述第一优先级顺序为所述第一进程针对多个优先级队列组的组间优先级及组内的优先级队列顺序,其中,每个优先级队列组对应一个优先级;所述多个优先级队列组用于各进程共同竞争;所述各进程针对所述多个优先级队列组均有相应的优先级顺序;所述第一进程为所述各进程中的任一进程;处理模块502,用于若所述第一进程成功竞争到所述目标优先级队列,则在第一预设时长内,通过所述第一进程,处理所述目标优先级队列中的数据单元。

可选的,所述处理模块502还用于:通过所述第一进程,获取队列指针;所述队列指针为空或者为首次失败指针;所述首次失败指针为上一轮消费回合中,连续多次竞争所述多个优先级队列组的优先级队列失败的过程中首次竞争失败的优先级队列的指针;其中,消费回合指所述第一进程完整竞争所述多个优先级队列组中每个优先级队列组的每个优先级队列的一个回合;若通过所述第一进程竞争所述目标优先级队列失败,且消费回合的回合数大于1,且所述队列指针指向所述目标优先级队列,则在所述第一预设时长内,保持所述第一进程空闲。

可选的,所述处理模块502还用于:在所述第一预设时长结束后,降低所述目标优先级队列的优先级,从而更新所述第一优先级顺序;若所述最高优先级队列组中的优先级队列不为空,则通过所述第一进程,竞争更新后所述第一优先级顺序中所述最高优先级队列组的首位优先级队列;或者,若所述最高优先级队列组中的优先级队列为空,则通过所述第一进程,竞争更新后的所述第一优先级顺序中次高优先级队列组的首位优先级队列。

可选的,所述第一优先级顺序是基于链表结构记录的;所述最高优先级队列组的优先级队列记录在第一链表中;所述处理模块502具体用于:将所述目标优先级队列的记录从所述第一链表中删除;将所述目标优先级队列的记录添加至所述第二链表的尾位,从而降低所述目标优先级队列的优先级。

可选的,所述处理模块502具体用于:所述第一进程成功获取所述目标优先级队列的队列锁;所述处理模块502还用于:若在第二预设时长结束后,所述第一进程未释放所述队列锁,则将所述队列锁设置为空闲状态,以供所述各进程竞争;所述第二预设时长大于或等于所述第一预设时长;通过第二进程成功竞争到所述目标优先级队列。

可选的,所述第一优先级顺序按照以下方式设置:获取所述多个优先级队列组的初始优先级;根据所述多个优先级队列组的初始优先级与最大初始优先级的差值,以及所述优先级队列组的初始优先级与最小初始优先级的差值,将所述多个优先级队列组中多个初始优先级映射为所述多个优先级队列组的优先级,从而设置所述第一优先级顺序;所述最大初始优先级为所述多个优先级队列组的初始优先级中最大的优先级;所述最小初始优先级为所述多个优先级队列组的初始优先级中最小的优先级。

可选的,所述第一预设时长是根据运行所述第一进程所在主机的处理性能设置的;所述第一预设时长与所述主机的处理性能呈负相关。

本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的一种数据处理方法及任一可选方法。

本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的一种数据处理方法及任一可选方法。

最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:空间以太网缓存处理方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!