[发明专利]一种用于网络编程中提高缓冲区内存使用率的设计方法在审
申请号: | 201310210855.2 | 申请日: | 2013-05-31 |
公开(公告)号: | CN103259745A | 公开(公告)日: | 2013-08-21 |
发明(设计)人: | 邹国卫 | 申请(专利权)人: | 东蓝数码股份有限公司 |
主分类号: | H04L12/861 | 分类号: | H04L12/861;G06F12/08;G06F17/30 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 315000 浙江省宁波市鄞*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 用于 网络 编程 提高 缓冲区 内存 使用率 设计 方法 | ||
技术领域:
本发明涉及网络通信领域,具体涉及一种用于网络编程中提高缓冲区内存使用率的设计方法。
背景技术:
目前,许多网络通讯库在对消息缓冲区的设计上都是采用一种能够自动扩张的缓冲区,其基本的策略如下:
1.当缓冲区不够存放新消息时,会在内部做内存整理,看看是否能够腾挪出足够的空间。
2.假如没有足够的空间存放,那么就对缓冲区进行扩张,大小为原来的两倍,扩张之后的缓冲区就不会缩小。
这样做在进行普通的稳定传输下不会有什么问题,但是假如业务层将很大的一块消息包(2MB以上)放进缓冲区,或者是业务层快速地将小块数据放入到缓冲区,而底层的IO复用的线程由于某些情况没有来得及响应,都会导致缓冲区增长到非常大的程度,而且由于缓冲区只能伸不能缩的性质,在之后的传输过程中内存使用率就会很低。考虑这样一个场景,一个应用在接收一个新连接之后,会首先发送一大块的数据(假设2MB)给对端进行初始化,而业务层又没有对这2MB的数据进行分块发送,直接放进了网络层缓冲区中,缓冲区被直接撑大到2MB,这当然没问题,传输一样可以顺利完成,但在数据初始化完毕后,该应用持续发送的都是小消息包,那么这2MB的缓冲区就被浪费了。
发明内容:
本发明的目的是提供一种用于网络编程中提高缓冲区内存使用率的设计方法,它能够将一块一块的缓冲区节点串联在一起,形成一张缓冲区链表,这样就满足任何大小的数据存入;且链表这种结构的增删性很强,且每个节点都是独立的,可以单个回收,解决了一整块连续缓冲区无法回收部分内存从而导致使用率低的问题。
为了解决背景技术所存在的问题,本发明是采用以下技术方案:它包含提供消息包来源的业务层、处理消息包的网络层和取出缓冲区数据的读取方;所述的处理消息包的网络层为初始化一个缓冲区链表,该缓冲区链表只有一个缓冲区节点并且为此分配的空间为8KB。
所述的提供消息包来源的业务层是需要传输消息包给所述的网络层处理时,若此消息内容小于8KB,则把该消息放在缓冲区链表的第一个缓冲区节点。若此消息内容数据非常之大是足以是单块缓冲区大小的n倍,那么缓冲区链表就会产生n个缓冲区来存放数据。
所述的取出缓冲区数据的读取方是从网络层缓冲区链表中取出数据,每当一块缓冲区读取完毕,就从缓冲区链表中释放该缓冲区节点,直至最后最有一块缓冲区。
本发明中提供消息包来源的业务层需要传输的消息包内容都是小包(小于单块缓冲大小),因此缓冲区链表所占用的大小一直保持8KB。
本发明具有以下有益效果:能够将一块一块的缓冲区节点串联在一起,形成一张缓冲区链表,这样就满足任何大小的数据存入;且链表这种结构的增删性很强,且每个节点都是独立的,可以单个回收,解决了一整块连续缓冲区无法回收部分内存从而导致使用率低的问题。
附图说明:
图1是本发明的设计流程图。
具体实施方式:
参看图1,本具体实施方式采用以下技术方案:它包含提供消息包来源的业务层、处理消息包的网络层和取出缓冲区数据的读取方;所述的处理消息包的网络层为初始化一个缓冲区链表,该缓冲区链表只有一个缓冲区节点并且为此分配的空间为8KB。
所述的提供消息包来源的业务层是需要传输消息包给所述的网络层处理时,若此消息内容小于8KB,则把该消息放在缓冲区链表的第一个缓冲区节点。若此消息内容数据非常之大是足以是单块缓冲区大小的n倍,那么缓冲区链表就会产生n个缓冲区来存放数据。
所述的取出缓冲区数据的读取方是从网络层缓冲区链表中取出数据,每当一块缓冲区读取完毕,就从缓冲区链表中释放该缓冲区节点,直至最后最有一块缓冲区。
本具体实施方式中提供消息包来源的业务层需要传输的消息包内容都是小包(小于单块缓冲大小),因此缓冲区链表所占用的大小一直保持8KB。
本具体实施方式能够将一块一块的缓冲区节点串联在一起,形成一张缓冲区链表,这样就满足任何大小的数据存入;且链表这种结构的增删性很强,且每个节点都是独立的,可以单个回收,解决了一整块连续缓冲区无法回收部分内存从而导致使用率低的问题。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其他不同形式的变化和变动。这里无法对所有的实施方式予以穷举。凡是属于本发明的技术方案所引申出的显而易见的变化或变动仍处于本发明的保护范围之列。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东蓝数码股份有限公司,未经东蓝数码股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310210855.2/2.html,转载请声明来源钻瓜专利网。