[发明专利]一种基于多重循环缓存的消息处理方法及系统在审
申请号: | 202011004152.0 | 申请日: | 2020-09-22 |
公开(公告)号: | CN112148488A | 公开(公告)日: | 2020-12-29 |
发明(设计)人: | 周天涯 | 申请(专利权)人: | 杭州电魂网络科技股份有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F9/54 |
代理公司: | 浙江千克知识产权代理有限公司 33246 | 代理人: | 吴辉辉 |
地址: | 310000 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 多重 循环 缓存 消息 处理 方法 系统 | ||
本发明公开了一种基于多重循环缓存的消息处理方法,包括:S11.预设1K大小的内存作为环形队列的初始数据缓存;S12.设置写入游标writeOffset和读取游标readOffset;其中生产者负责写入数据,消费者负责读取数据;S13.设置当前写入的数据为T,当前环形队列的长度为S,判断生产者需要写入的数据是否大于T,若是,则采用倍增的方式对预设的内存进行扩展,得到容纳当前内存大小的环形队列;S14.将生产者需要写入的数据全部拷贝到得到的环形队列上。本发明可以避免频繁申请和释放内存,有效合理的减少内存碎片,并且加速内存的使用。
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于多重循环缓存的消息处理方法及系统。
背景技术
网络游戏开发过程中不免会有一些网络消息处理,往往是一个线程接收消息,一个线程处理消息,消息内容会放到一个先入先出(FIFO)的队列中,在多线程的情况下,用锁来控制临界区数据。这里就遇到一个问题,数据大小是不定的,队列的空间申请太小,就会导致频繁申请释放内存,导致内存碎片,影响运行效率;队列空间申请太大,如果实际用到的数据量很小,则会无谓浪费空间。
发明内容
本发明的目的是针对现有技术的缺陷,提供了一种基于多重循环缓存的消息处理方法及系统。
为了实现以上目的,本发明采用以下技术方案:
一种基于多重循环缓存的消息处理方法,包括:
S1.预设1K大小的内存作为环形队列的初始数据缓存;
S2.设置写入游标writeOffset和读取游标readOffset;其中生产者负责写入数据,消费者负责读取数据;
S3.设置当前写入的数据为T,当前环形队列的长度为S,判断生产者需要写入的数据是否大于T,若是,则采用倍增的方式对预设的内存进行扩展,得到容纳当前内存大小的环形队列;
S4.将生产者需要写入的数据全部拷贝到得到的环形队列上。
进一步的,所述步骤S2中生产者负责写入数据,其中写入数据是从写入游标writeOffset开始拷贝数据内存;
消费者负责读取数据,其中读取数据是从读取游标readOffset开始拷贝内存。
进一步的,所述步骤S3中设置当前生产者写入数据为T,当前环形队列的长度为S,则写入游标writeOffset和读取游标readOffset的关系包括:
若readOffset等于writeOffset,则缓存中没有数据,表示为:T=S;
若readOffset小于writeOffset,则剩余写入数据的内存表示为:T=S-writeOffset+readOffset;
若readOffset大于writeOffset,则剩余写入数据的内存表示为T=readOffset–writeOffset。
进一步的,所述步骤S3中采用倍增的方式对预设的内存进行扩展是将当前内存大小的数据缓存设置为前一个内存大小的数据缓存的两倍。
进一步的,所述步骤S4之后还包括:
S5.判断当前剩余写入数据T在预设时间内是否大于当前环形队列的长度S的1/2,若是,则将当前内存拷贝到低一级的环形队列上,并释放当前环形队列的内存。
进一步的,所述步骤S5之后还包括:
S6.判断writeOffset是否等于readOffset,若是,则将内存拷贝到内存为1K大小的环形队列上,并释放当前环形队列的内存。
相应的,还提供一种基于多重循环缓存的消息处理系统,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电魂网络科技股份有限公司,未经杭州电魂网络科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011004152.0/2.html,转载请声明来源钻瓜专利网。