【技术实现步骤摘要】
一种基于内存池的消息队列优化方法
[0001]本专利技术属于数据传输
,具体涉及一种基于内存池的消息队列优化方法。
技术介绍
[0002]消息队列是实现线程间数据传输的常用技术,其实现方式多种多样,常用的有系统消息队列、kafka、RabbitMQ、Redis队列、以及加锁环形链表等。但由于这些技术容易受到数据拷贝、系统调用、锁阻塞的影响,因此主要用在用户态或内核态对性能非极度挑剔的场景下。而在消息传输对内存和时效敏感的场景下,系统对数据的处理在性能、内存占用等方面有极高的要求,进而有现有技术采用DPDK(Data Plane Development Kit,数据平面开发套件)的rte_ring(无锁环形队列)进行消息队列的传输。
[0003]但是,现有技术中,DPDK的rte_ring,虽然实现了无锁、零拷贝,但也存在频繁分配与释放堆内存的问题,即使采用预分配堆方式,但对于一些峰值流量场景、大小包比例不均且动态变化的场景,当前也存在内存占用不灵活、内存使用率低的问题,更无法在性能与内存占用之间达到平衡。 />
技术实现思路
...
【技术保护点】
【技术特征摘要】
1.一种基于内存池的消息队列优化方法,其特征在于,包括:S101:通过无锁环形队列的方式,构建内存池队列,其中,每个所述内存池队列中包括至少一个容量大小相同的内存块;S102:获取消息数据,根据所述消息数据的长度,挑选目标内存块,通过所述目标内存块存放所述消息数据;S103:按照所述目标内存块的挑选顺序,填充所述目标内存块的头部区,其中,填充的内容包括:所属的内存池队列编号、消息的总块数以及消息的块索引值;S104:配置内存块指针,所述内存块指针用于存放所述目标内存块的指针值;S105:将所述内存块指针放入消息队列,并通过消息通道进行传输;S106:在所述消息数据完成传输的情况下,对所述目标内存块进行回收。2.根据权利要求1所述的消息队列优化方法,其特征在于,所述S102具体包括:S1021:在所述消息数据的长度小于或者等于长度阈值的情况下,挑选出符合第一预设条件的所有内存池队列,其中,所述第一预设条件为内存块容量大于或者等于所述消息数据的长度;S1022:从符合所述第一预设条件的内存池队列中,挑选出符合第二预设条件的内存池队列,其中,所述第二预设条件为内存块容量最小;S1023:在仅有一个内存池队列满足所述第二预设条件的情况下,从该内存池队列中确定出所述目标内存块;S1024:在存在多个内存池队列满足所述第二预设条件的情况下,从队列编号最小的内存池队列中确定出所述目标内存块。3.根据权利要求2所述的消息队列优化方法,其特征在于,所述S102还包括:S1025:在所述消息数据的长度大于所述长度阈值的情况下,挑选出符合第三预设条件的所有内存池队列,其中,所述第三预设条件为内存块容量小于所述消息数据的长度;S1026:从符合所述第三预设条件的内存池队列中,挑选出符合第四预设条件的内存池队列,其中,所述第四预设条件为内存块容量最大;S1027:在存在多个内存池队列满足所述第四预设条件的情况下,从队列编号最小的内存池队列中确定出t个所述目标内存块,其中t满足以下条件:t
×
m<l<(t+1)
×
m其中,m为编号最小的内存池队列的内存块容量,l为所述消息数据的长度;S1028:计算剩余消息数据的长度l1:l1=l﹣t
×
mS1029:,对于所述剩余消息数据,重新执行S1021。4.根据权利要求3所述的消息队列优化方法,其特征在于,每个t的值以及所有t值的和均小于或者等于8,所述块索引值的范围为0至7。5.根据权利要求4所述的消息队列优化...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。