队列消息的操作方法、装置和存储介质与流程

文档序号:17473704发布日期:2019-04-20 05:59阅读:200来源:国知局
队列消息的操作方法、装置和存储介质与流程

本发明涉及通信技术领域,尤其涉及一种队列消息的操作方法、装置和存储介质。



背景技术:

在计算机软件设计领域,消息队列作为一个经典的设计模式被广泛地应用于不同的程序结构之中。业界上主流的消息队列可分为“非嵌入式消息队列”与“嵌入式消息队列“,非嵌入式消息队列可独立作为单独的程序进行部署并且使用;而嵌入式的消息队列一般作为库函数嵌入至程序内部,与业务逻辑一同部署。

对于“非嵌入式消息队列”,由于其作为一个独立的进程单独部署,且与大部分与业务逻辑程序通过tcp/ip、unixsocket、ipc等进程间通信方式交互数据,因此,通信时延较之于嵌入式消息队列较大,不适用于金融证券行业等对时延要求敏感的领域。

对于“嵌入式消息队列”而言,虽然其时延较低,但是由于复杂的业务需求,导致业界产品对该模式支持并不完善,例如boost::lockfreequeue等队列,其仅支持固定的消息长度,并且无法进行跨进程间的通信。而zeromq设计复杂,虽然灵活性上有较大的提升,但是由于其灵活的设计,损失了较大的性能,并且对多线程的支持及其薄弱,无法有效的利用单机的计算能力。

综上,现有消息队列产品很难兼顾灵活性、低时延与高性能。



技术实现要素:

本发明的主要目的在于提供一种队列消息的操作方法、装置和存储介质,旨在解决消息队列产品很难兼顾灵活性、低时延与高性能的问题。

为实现上述目的,本发明提供的一种队列消息的操作方法,所述队列消息的操作方法应用于存储介质,所述存储介质内设头指针、尾指针、释放指针以及队列存储空间,所述头指针、所述尾指针以及所述释放指针指向所述队列存储空间;所述队列消息的操作方法包括以下步骤:

在接收到队列消息的操作指令时,确定所述操作指令的类型,其中,所述操作指令包括入队指令、出队指令以及释放指令;

根据所述操作指令,确定待移动的指针以及所述待移动的指针在所述队列存储空间中的目标位置,其中,所述队列存储空间中的各个队列消息的数据量可不相同;

控制所述待移动的指针移动至所述目标位置,并对所述队列消息执行所述操作指令对应的操作。

在一实施例中,所述确定待移动的指针以及所述待移动的指针在所述队列存储空间中的目标位置的步骤包括:

在所述操作指令为入队指令时,确定所述队列消息的数据量,并将所述尾指针确定为待移动的指针;

根据所述数据量确定所述队列消息在所述队列存储空间中待分配区域的存储区域,并将所述存储区域的尾部作为所述待移动的指针的目标位置。

在一实施例中,所述确定所述队列消息的数据量的步骤之后,还包括:

判断所述队列消息的数据量是否小于或等于所述待分配区域的存储量;

在所述队列消息的数据量小于或等于所述待分配区域的存储量时,执行将所述尾指针确定为待移动的指针的步骤;

在所述队列消息的数据量大于所述待分配区域的存储量时,将所述待分配区域的状态由待分配更改为不可分配以得到不可分配区域,并将所述尾指针移动至所述尾指针在所述队列存储空间中的起始位置。

在一实施例中,所述确定待移动的指针以及所述待移动的指针在所述队列存储空间中的目标位置的步骤包括:

在所述操作指令为出队指令时,将所述头指针确定为待移动的指针,并确定所述队列消息的尾部在所述队列存储空间中的位置;

将所述位置确定为所述待移动的指针的目标位置。

在一实施例中,所述确定待移动的指针以及所述待移动的指针在所述队列存储空间中的目标位置的步骤包括:

在所述操作指令为释放指令时,将所述释放指针作为待移动的指针,并确定所述队列消息的尾部;

将所述队列消息的尾部作为所述待移动的指针对应的目标位置。

在一实施例中,所述将所述释放指针作为待移动的指针的步骤之后,还包括:

判断是否存在与所述队列消息相邻的待回收队列区域,其中,所述待回收队列区域中含有一个待回收的队列消息或多个依次相邻的待回收的队列消息,所述待回收队列区域位于所述队列消息之后;

在未含有与所述队列消息相邻的待回收队列区域时,执行所述确定所述队列消息的尾部的步骤;

在含有与所述队列消息相邻的待回收队列区域时,将所述待回收队列区域的尾部作为所述待移动的指针的目标位置。

在一实施例中,所述将所述待移动的指针移动至所述目标位置的步骤之后,还包括:

在所述释放指针移动过程中经过不可分配区域,且所述头指针以及所述尾指针均位于所述不可分配区域之后时,将所述不可分配区域的状态由不可分配更改为待分配,以将所述不可分配区域更改为待分配区域。

在一实施例中,所述对所述队列消息执行所述操作指令对应的操作的步骤包括:

在所述操作指令为入队指令时,将所述队列消息放置于所述队列消息对于的存储区域,并根据所述队列消息更新所处队列存储空间的数据结构;

在所述操作指令为入队指令时,复制所述队列消息中的消息体,以将所述消息体发送至目标应用,并将所述队列消息的状态由已入队更改为已出队;

在所述操作指令为释放指令时,将所述队列消息的状态由已出队设置为释放状态,并对所述的队列消息进行释放。

为实现上述目的,本发明还提供一种队列消息的操作装置,所队列消息的操作装置包括处理器、存储器和存储在所述存储器上并可在所述处理器上运行的队列消息的操作程序,所述队列消息的操作程序被所述处理器执行时实现如上所述的队列消息的操作方法的各个步骤。

为实现上述目的,本发明还提供一种存储介质,所述存储介质存储中内设头指针、尾指针、释放指针以及队列存储空间,所述头指针、所述尾指针以及所述释放指针指向所述队列存储空间,所述存储介质还存储有队列消息的操作程序,所述队列消息的操作程序被所述处理器执行时实现如上所述的队列消息的操作方法的各个步骤。

本发明提供的队列消息的操作方法、装置和存储介质,在接收到队列消息的操作指令时,确定操作指令的类型,从而根据所述操作指令,在尾指针、头指针以及释放指针中确定待移动的指针,并确定待移动的指针在队列存储空间中的目标位置,从而控制待移动的指针移动至目标位置,以对队列消息执行操作指令对应的操作;由于存储介质中的各个队列消息的数据量可变,使得存储介质存储队列消息的灵活性较高,同时,由于存储介质在其内部执行对队列消息的出队操作以及入队操作,而无需在网络环境下进行出队以及入队操作,使得操作时延较小,提高了存储介质的性能,也即本发明提供的存储介质能够同时兼顾灵活性、低时延以及高性能大三特性。

附图说明

图1为本发明实施例涉及的存储介质的硬件结构示意图;

图2为本发明队列消息的操作方法的第一实施例;

图3为图2中步骤s20的一细化流程示意图;

图4为图2中步骤s20的另一细化流程示意图;

图5为图2中步骤s20的再一细化流程示意图;

图6为本发明中队列消息的入队操作的简易流程示意图;

图7为本发明中队列消息的出队操作的简易流程示意图;

图8为本发明中队列消息的释放操作的简易流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明实施例的主要解决方案是:在接收到队列消息的操作指令时,确定所述操作指令的类型,其中,所述操作指令包括入队指令、出队指令以及释放指令;根据所述操作指令,确定待移动的指针以及所述待移动的指针在所述队列存储空间中的目标位置,其中,所述队列存储空间中的各个队列消息的数据量可不相同;控制所述待移动的指针移动至所述目标位置,并对所述队列消息执行所述操作指令对应的操作。

由于存储介质中的各个队列消息的数据量可变,使得存储介质存储队列消息的灵活性较高,同时,由于存储介质在其内部执行对队列消息的出队操作以及入队操作,而无需在网络环境下进行出队以及入队操作,使得操作时延较小,提高了存储介质的性能,也即本发明提供的存储介质能够同时兼顾灵活性、低时延以及高性能大三特性。

作为一种实现方案,存储介质可以如图1所示。

本发明实施例方案涉及的是存储介质102,存储介质102连接处理器101,例如cpu以及通信总线103,存储介质102包括头指针,尾指针,释放指针以及队列存储空间。其中,通信总线103用于实现这些组件之间的连接通信,头指针、尾指针、释放指针均指向队列存储空间。

存储介质可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器,存储介质还可以是生产者与消费者在共享介质上的一段连续地址空间。如图1所示,存储介质中可包括队列消息的操作程序;而处理器101可以用于调用存储接种中存储的队列消息的操作程序,并执行以下操作:

在接收到队列消息的操作指令时,确定所述操作指令的类型,其中,所述操作指令包括入队指令、出队指令以及释放指令;

根据所述操作指令,确定待移动的指针以及所述待移动的指针在所述队列存储空间中的目标位置,其中,所述队列存储空间中的各个队列消息的数据量可不相同;

控制所述待移动的指针移动至所述目标位置,并对所述队列消息执行所述操作指令对应的操作。

在一实施例中,处理器101可以用于调用存储介质中存储的投影机的甄别程序,并执行以下操作:

在所述操作指令为入队指令时,确定所述队列消息的数据量,并将所述尾指针确定为待移动的指针;

根据所述数据量确定所述队列消息在所述队列存储空间中待分配区域的存储区域,并将所述存储区域的尾部作为所述待移动的指针的目标位置。

在一实施例中,处理器101可以用于调用存储介质中存储的投影机的甄别程序,并执行以下操作:

判断所述队列消息的数据量是否小于或等于所述待分配区域的存储量;

在所述队列消息的数据量小于或等于所述待分配区域的存储量时,执行将所述尾指针确定为待移动的指针的步骤;

在所述队列消息的数据量大于所述待分配区域的存储量时,将所述待分配区域的状态由待分配更改为不可分配以得到不可分配区域,并将所述尾指针移动至所述尾指针在所述队列存储空间中的起始位置。

在一实施例中,处理器101可以用于调用存储介质中存储的投影机的甄别程序,并执行以下操作:

在所述操作指令为出队指令时,将所述头指针确定为待移动的指针,并确定所述队列消息的尾部在所述队列存储空间中的位置;

将所述位置确定为所述待移动的指针的目标位置。

在一实施例中,处理器101可以用于调用存储介质中存储的投影机的甄别程序,并执行以下操作:

在所述操作指令为释放指令时,将所述释放指针作为待移动的指针,并确定所述队列消息的尾部;

将所述队列消息的尾部作为所述待移动的指针对应的目标位置。

在一实施例中,处理器101可以用于调用存储介质中存储的投影机的甄别程序,并执行以下操作:

判断是否存在与所述队列消息相邻的待回收队列区域,其中,所述待回收队列区域中含有一个待回收的队列消息或多个依次相邻的待回收的队列消息,所述待回收队列区域位于所述队列消息之后;

在未含有与所述队列消息相邻的待回收队列区域时,执行所述确定所述队列消息的尾部的步骤;

在含有与所述队列消息相邻的待回收队列区域时,将所述待回收队列区域的尾部作为所述待移动的指针的目标位置。

在一实施例中,处理器101可以用于调用存储介质中存储的投影机的甄别程序,并执行以下操作:

在所述释放指针移动过程中经过不可分配区域,且所述头指针以及所述尾指针均位于所述不可分配区域之后时,将所述不可分配区域的状态由不可分配更改为待分配,以将所述不可分配区域更改为待分配区域。

在一实施例中,处理器101可以用于调用存储介质中存储的投影机的甄别程序,并执行以下操作:

在所述操作指令为入队指令时,将所述队列消息放置于所述队列消息对于的存储区域,并根据所述队列消息更新所处队列存储空间的数据结构;

在所述操作指令为入队指令时,复制所述队列消息中的消息体,以将所述消息体发送至目标应用,并将所述队列消息的状态由已入队更改为已出队;

在所述操作指令为释放指令时,将所述队列消息的状态由已出队设置为释放状态,并对所述的队列消息进行释放。

本实施例根据上述方案,在接收到队列消息的操作指令时,确定操作指令的类型,从而根据所述操作指令,在尾指针、头指针以及释放指针中确定待移动的指针,并确定待移动的指针在队列存储空间中的目标位置,从而控制待移动的指针移动至目标位置,以对队列消息执行操作指令对应的操作;由于存储介质中的各个队列消息的数据量可变,使得存储介质存储队列消息的灵活性较高,同时,由于存储介质在其内部执行对队列消息的出队操作以及入队操作,而无需在网络环境下进行出队以及入队操作,使得操作时延较小,提高了存储介质的性能,也即本发明提供的存储介质能够同时兼顾灵活性、低时延以及高性能大三特性。

基于上述存储介质的硬件构架,提出本发明队列消息的操作方法的实施例。

参照图2,图2为本发明队列消息的操作方法的第一实施例,所述队列消息的操作方法包括以下步骤:

步骤s10,在接收到队列消息的操作指令时,确定所述操作指令的类型,其中,所述操作指令包括入队指令、出队指令以及释放指令;

在本发明中,存储介质内设有头指针(head)、尾指针(tail)、释放指针(release)以及队列存储空间,头指针、尾指针以及释放指针均指向队列存储空间,头指针、尾指针以及释放指针为一段地址,地址的长度固定,队列存储空间为环形结构,队列存储空间中设有元数据区域,元数据区域包括头指针、尾指针以及释放指针的地址。需要说明的是,在本发明中,存储介质可以是生产者与消费者在共享介质上的一段连续地址空间,例如,进程私有内存,虚拟内存等,也可以是非易逝性存储,如,磁盘,共享内存等。

存储介质接收到队列消息的操作指令时,需要确定操作指令的类型,并根据操作指令确定需要操作的队列消息,队列消息包括队列消息状态、消息体以及队列消息的数据量,数据量也即数据长度,队列消息的数据量(length)、队列状态(status)以及消息体(body)依次相邻构成队列消息,队列状态包括已出队、已入队、待回收等状态。

步骤s20,根据所述操作指令,确定待移动的指针以及所述待移动的指针在所述队列存储空间中的目标位置,其中,所述队列存储空间中的各个队列消息的数据量可不相同;

在当存储介质接收到入队指令时,则会移动尾指针,在存储介质接收到出队指令时,移动头指针,在存储介质接收到释放指令时,移动释放指针,可以理解的是,操作指令包括入队指令、出队指令以及释放指令。需要说明的是,队列存储空间中存储的队列消息的数据量可以不同,也即各个队列消息的数据长度并不是固定,是可变的。

在当操作指令为入队指令时,存储介质则需对队列消息执行入队操作(push操作),并确定待移动的指针以及待移动指针对应的目标位置,具体的,参照图3,即步骤s20包括:

步骤s21,在所述操作指令为入队指令时,确定所述队列消息的数据量,并将所述尾指针确定为待移动的指针;

步骤s22,根据所述数据量确定所述队列消息在所述队列存储空间中待分配区域的存储区域,并将所述存储区域的尾部作为所述待移动的指针的目标位置;

在操作指令为入队指令时,待移动的指针为尾指针;队列存储空间设有待分配区域,待分配区域为空闲的存储区域,队列存储空间存储队列消息遵循先进先出的原则,也即将越早入队的队列消息越靠近元数据区域;存储介质会确定队列消息的数据量,从而根据数据量以及先进先出原则确定队列消息待分配区域的存储区域,存储区域的尾部即为尾指针对应的目标位置,也即在尾指针移动至目标位置后,将队列消息放置在该存储区域中。

需要说明的是,在确定队列消息的数据量后,存储介质需要判断队列消息的数据量是否小于或等于待分配区域的存储量,若数据量小于或等于待分配区域的存储量,则表明待分配区域能够存储队列消息,此时,则执行步骤s21、步骤s22以及步骤s30;若数据量大于待分配区域的存储量,则表明待分配区域无法存储队列消息,此时,将待分配区域的状态更改为不可分配,从而将待分配区域更改为不可分配区域,不可分配区域可用gap区域表征,此时,将尾指针移动至尾指针在队列存储空间中的起始位置。

在当操作指令为出队指令时,存储介质则需对队列消息执行出队操作(pop操作),并确定待移动的指针以及待移动指针对应的目标位置,具体的,参照图4,即步骤s20包括:

步骤s23,在所述操作指令为出队指令时,将所述头指针确定为待移动的指针,并确定所述队列消息的尾部在所述队列存储空间中的位置;

步骤s24,将所述位置确定为所述待移动的指针的目标位置;

在操作指令为出队指令时,则表明存储介质需要将存储的该队列消息复制,并传输至对应的目标应用,此时,待移动的指针为头指针;需要说明的是,出队操作也需遵循先进先出的原则;队列消息在队列存储空间具有队列的区域,该区域的尾部也即第一位置,即为头指针的目标位置,而在队列消息处于入队状态时,头指针所在位置必然在该队列消息的头部之前,可以理解的是,在头指针移动至该目标位置后,头指针移动的区域必然包括该队列消息。

需要说明的是,在当进行出队操作时,若头指针遇到不可分配区域时,头指针需越过不可分配区域,也即仅复制队列消息,并不复制对不可分配区域的状态等数据进行复制,另外,复制队列消息,可以仅复制队列消息的消息体。

在当操作指令为释放指令时,存储介质则需对队列消息执行释放操作,并确定待移动的指针以及待移动指针对应的目标位置,具体的,参照图5,即步骤s20包括:

步骤s25,在所述操作指令为释放指令时,将所述释放指针作为待移动的指针,并确定所述队列消息的尾部;

步骤s26,将所述队列消息的尾部作为所述待移动的指针对应的目标位置;

在操作指令为释放指令时,则表明存储介质需要将该队列消息释放,需要说明的是,该队列消息的状态为已出队状态,目标应用在得到该队列消息后,会向存储介质发送信息,存储介质接收到该信息时,即可生成该队列操作的释放指令;队列消息处于已出队状态时,头指针指向该队列消息的尾部,故在释放操作(rlease操作)时,需将释放指针移动至头指针对应的位置,以完成对该队列消息的释放。

此外,在进行释放操作,会将与该队列消息相邻的可释放队列消息(可释放队列消息即为状态为待回收的队列消息)一同释放,对此,存储介质在释放指针作为待移动的指针后,判断是否含有与队列消息相邻的待回收队列区域,待回收队列区域中含有一个待回收的队列消息或者多个依次相邻的待回收队列消息,且待回收队列区域在该队列消息之后;若未含有与队列消息相邻的待回收队列区域时,则可执行步骤s205以及步骤s206,若含有与队列消息相邻的待回收队列区域时,则需要将该待回收队列区域与队列消息一同释放,也即将待回收队列区域的尾部作为释放指针的目标位置。

另外,在释放指针移动过程中,若是经过不可分配区域,也即经过gap区域,且头指针以及尾指针均在不可分配区域之后时,需将不可分配区域的状态由不可分配更改为待分配,从而将不可分配区域更改为待分配区域。

步骤s30,控制所述待移动的指针移动至所述目标位置,并对所述队列消息执行所述操作指令对应的操作;

在本发明中,待移动指针不同时,存储介质对队列消息的操作有所不同,具体的,在当待移动的指针为尾指针时,将队列消息放置于队列消息对应的存储区域,并根据队列消息更新队列存储空间的数据结构,数据结构指的是队列消息的已存储数据量,以及队列消息自身状态的设置,队列消息自身状态的设置指的是将队列消息的状态设置为已入队;

在当待移动的指针为头指针时,复制队列消息中的消息体,从而将消息体发送至目标应用,并同时将队列消息的状态由已入队更改为已出队;

在当待移动的指针为释放指针时,将队列消息的状态由已出队设置为释放状态,并对队列消息进行释放,也即释放指针在移动至队列消息的尾部时,即可完成队列消息的释放。

参照图6,图6为本发明中队列消息的入队操作的简易流程示意图;参照图7,图7为本发明中队列消息的出队操作的简易流程示意图;以及参照图8,图8为本发明中队列消息的释放操作的简易流程示意图;三种队列消息的操作流程在此不再一一赘述。

在本实施例提供的技术方案中,在接收到队列消息的操作指令时,确定操作指令的类型,从而根据所述操作指令,在尾指针、头指针以及释放指针中确定待移动的指针,并确定待移动的指针在队列存储空间中的目标位置,从而控制待移动的指针移动至目标位置,以对队列消息执行操作指令对应的操作;由于存储介质中的各个队列消息的数据量可变,使得存储介质存储队列消息的灵活性较高,同时,由于存储介质在其内部执行对队列消息的出队操作以及入队操作,而无需在网络环境下进行出队以及入队操作,使得操作时延较小,提高了存储介质的性能,也即本发明提供的存储介质能够同时兼顾灵活性、低时延以及高性能大三特性。

本发明还提供一种队列消息的操作装置,所队列消息的操作装置包括处理器、存储器和存储在所述存储器上并可在所述处理器上运行的队列消息的操作程序,所述队列消息的操作程序被所述处理器执行时实现如上实施例所述的队列消息的操作方法的各个步骤。

本发明还提供一种存储介质,所述存储介质存储中内设头指针、尾指针、释放指针以及队列存储空间,所述头指针、所述尾指针以及所述释放指针指向所述队列存储空间,所述存储介质还存储有队列消息的操作程序,所述队列消息的操作程序被所述处理器执行时实现如上实施例所述的队列消息的操作方法的各个步骤。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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