CN103259745A - 一种用于网络编程中提高缓冲区内存使用率的设计方法 - Google Patents
一种用于网络编程中提高缓冲区内存使用率的设计方法 Download PDFInfo
- Publication number
- CN103259745A CN103259745A CN2013102108552A CN201310210855A CN103259745A CN 103259745 A CN103259745 A CN 103259745A CN 2013102108552 A CN2013102108552 A CN 2013102108552A CN 201310210855 A CN201310210855 A CN 201310210855A CN 103259745 A CN103259745 A CN 103259745A
- Authority
- CN
- China
- Prior art keywords
- buffering area
- buffer area
- chained list
- node
- network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
一种用于网络编程中提高缓冲区内存使用率的设计方法,它涉及网络通信领域。处理消息包的网络层为初始化一个缓冲区链表,该缓冲区链表只有一个缓冲区节点并且为此分配的空间为8KB;所述的提供消息包来源的业务层是需要传输消息包给所述的网络层处理时,若此消息内容小于8KB,则把该消息放在缓冲区链表的第一个缓冲区节点;所述的取出缓冲区数据的读取方是从网络层缓冲区链表中取出数据,每当一块缓冲区读取完毕,就从缓冲区链表中释放该缓冲区节点,直至最后最有一块缓冲区;本发明解决了一整块连续缓冲区无法回收部分内存从而导致使用率低的问题。
Description
技术领域:
本发明涉及网络通信领域,具体涉及一种用于网络编程中提高缓冲区内存使用率的设计方法。
背景技术:
目前,许多网络通讯库在对消息缓冲区的设计上都是采用一种能够自动扩张的缓冲区,其基本的策略如下:
1.当缓冲区不够存放新消息时,会在内部做内存整理,看看是否能够腾挪出足够的空间。
2.假如没有足够的空间存放,那么就对缓冲区进行扩张,大小为原来的两倍,扩张之后的缓冲区就不会缩小。
这样做在进行普通的稳定传输下不会有什么问题,但是假如业务层将很大的一块消息包(2MB以上)放进缓冲区,或者是业务层快速地将小块数据放入到缓冲区,而底层的IO复用的线程由于某些情况没有来得及响应,都会导致缓冲区增长到非常大的程度,而且由于缓冲区只能伸不能缩的性质,在之后的传输过程中内存使用率就会很低。考虑这样一个场景,一个应用在接收一个新连接之后,会首先发送一大块的数据(假设2MB)给对端进行初始化,而业务层又没有对这2MB的数据进行分块发送,直接放进了网络层缓冲区中,缓冲区被直接撑大到2MB,这当然没问题,传输一样可以顺利完成,但在数据初始化完毕后,该应用持续发送的都是小消息包,那么这2MB的缓冲区就被浪费了。
发明内容:
本发明的目的是提供一种用于网络编程中提高缓冲区内存使用率的设计方法,它能够将一块一块的缓冲区节点串联在一起,形成一张缓冲区链表,这样就满足任何大小的数据存入;且链表这种结构的增删性很强,且每个节点都是独立的,可以单个回收,解决了一整块连续缓冲区无法回收部分内存从而导致使用率低的问题。
为了解决背景技术所存在的问题,本发明是采用以下技术方案:它包含提供消息包来源的业务层、处理消息包的网络层和取出缓冲区数据的读取方;所述的处理消息包的网络层为初始化一个缓冲区链表,该缓冲区链表只有一个缓冲区节点并且为此分配的空间为8KB。
所述的提供消息包来源的业务层是需要传输消息包给所述的网络层处理时,若此消息内容小于8KB,则把该消息放在缓冲区链表的第一个缓冲区节点。若此消息内容数据非常之大是足以是单块缓冲区大小的n倍,那么缓冲区链表就会产生n个缓冲区来存放数据。
所述的取出缓冲区数据的读取方是从网络层缓冲区链表中取出数据,每当一块缓冲区读取完毕,就从缓冲区链表中释放该缓冲区节点,直至最后最有一块缓冲区。
本发明中提供消息包来源的业务层需要传输的消息包内容都是小包(小于单块缓冲大小),因此缓冲区链表所占用的大小一直保持8KB。
本发明具有以下有益效果:能够将一块一块的缓冲区节点串联在一起,形成一张缓冲区链表,这样就满足任何大小的数据存入;且链表这种结构的增删性很强,且每个节点都是独立的,可以单个回收,解决了一整块连续缓冲区无法回收部分内存从而导致使用率低的问题。
附图说明:
图1是本发明的设计流程图。
具体实施方式:
参看图1,本具体实施方式采用以下技术方案:它包含提供消息包来源的业务层、处理消息包的网络层和取出缓冲区数据的读取方;所述的处理消息包的网络层为初始化一个缓冲区链表,该缓冲区链表只有一个缓冲区节点并且为此分配的空间为8KB。
所述的提供消息包来源的业务层是需要传输消息包给所述的网络层处理时,若此消息内容小于8KB,则把该消息放在缓冲区链表的第一个缓冲区节点。若此消息内容数据非常之大是足以是单块缓冲区大小的n倍,那么缓冲区链表就会产生n个缓冲区来存放数据。
所述的取出缓冲区数据的读取方是从网络层缓冲区链表中取出数据,每当一块缓冲区读取完毕,就从缓冲区链表中释放该缓冲区节点,直至最后最有一块缓冲区。
本具体实施方式中提供消息包来源的业务层需要传输的消息包内容都是小包(小于单块缓冲大小),因此缓冲区链表所占用的大小一直保持8KB。
本具体实施方式能够将一块一块的缓冲区节点串联在一起,形成一张缓冲区链表,这样就满足任何大小的数据存入;且链表这种结构的增删性很强,且每个节点都是独立的,可以单个回收,解决了一整块连续缓冲区无法回收部分内存从而导致使用率低的问题。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其他不同形式的变化和变动。这里无法对所有的实施方式予以穷举。凡是属于本发明的技术方案所引申出的显而易见的变化或变动仍处于本发明的保护范围之列。
Claims (3)
1.一种用于网络编程中提高缓冲区内存使用率的设计方法,其特征在于它包含提供消息包来源的业务层、处理消息包的网络层和取出缓冲区数据的读取方;所述的处理消息包的网络层为初始化一个缓冲区链表,该缓冲区链表只有一个缓冲区节点并且为此分配的空间为8KB。
2.根据权利要求1所述的一种用于网络编程中提高缓冲区内存使用率的设计方法,其特征在于所述的提供消息包来源的业务层是需要传输消息包给所述的网络层处理时,若此消息内容小于8KB,则把该消息放在缓冲区链表的第一个缓冲区节点;若此消息内容数据非常之大是足以是单块缓冲区大小的n倍,那么缓冲区链表就会产生n个缓冲区来存放数据。
3.根据权利要求1所述的一种用于网络编程中提高缓冲区内存使用率的设计方法,其特征在于所述的取出缓冲区数据的读取方是从网络层缓冲区链表中取出数据,每当一块缓冲区读取完毕,就从缓冲区链表中释放该缓冲区节点,直至最后最有一块缓冲区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013102108552A CN103259745A (zh) | 2013-05-31 | 2013-05-31 | 一种用于网络编程中提高缓冲区内存使用率的设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013102108552A CN103259745A (zh) | 2013-05-31 | 2013-05-31 | 一种用于网络编程中提高缓冲区内存使用率的设计方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103259745A true CN103259745A (zh) | 2013-08-21 |
Family
ID=48963452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013102108552A Pending CN103259745A (zh) | 2013-05-31 | 2013-05-31 | 一种用于网络编程中提高缓冲区内存使用率的设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103259745A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550180A (zh) * | 2014-10-29 | 2016-05-04 | 北京奇虎科技有限公司 | 数据处理的方法、装置及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1798094A (zh) * | 2004-12-23 | 2006-07-05 | 华为技术有限公司 | 一种使用缓存区的方法 |
CN101026540A (zh) * | 2006-12-28 | 2007-08-29 | 复旦大学 | 智能多缓冲区管理的集中调度控制器和动态调度方法 |
CN201657012U (zh) * | 2009-10-29 | 2010-11-24 | 中兴通讯股份有限公司 | 千兆无源光网络缓冲区管理装置 |
-
2013
- 2013-05-31 CN CN2013102108552A patent/CN103259745A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1798094A (zh) * | 2004-12-23 | 2006-07-05 | 华为技术有限公司 | 一种使用缓存区的方法 |
CN101026540A (zh) * | 2006-12-28 | 2007-08-29 | 复旦大学 | 智能多缓冲区管理的集中调度控制器和动态调度方法 |
CN201657012U (zh) * | 2009-10-29 | 2010-11-24 | 中兴通讯股份有限公司 | 千兆无源光网络缓冲区管理装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550180A (zh) * | 2014-10-29 | 2016-05-04 | 北京奇虎科技有限公司 | 数据处理的方法、装置及系统 |
CN105550180B (zh) * | 2014-10-29 | 2019-02-12 | 北京奇虎科技有限公司 | 数据处理的方法、装置及系统 |
CN109634933A (zh) * | 2014-10-29 | 2019-04-16 | 北京奇虎科技有限公司 | 数据处理的方法、装置及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101515841B (zh) | 一种基于RapidIO协议的数据包传输的方法、设备和系统 | |
CN102761489B (zh) | 基于流水线模式的数据包零拷贝的核间通信方法 | |
CN102263701B (zh) | 队列调整方法及装置 | |
CN102880573A (zh) | 一种基于Linux系统的串行RapidIo数据传输方法 | |
TW200928769A (en) | Schedule and data caching for wireless transmission | |
CN103023808A (zh) | 基于块状链表结构的6lowpan数据包重装缓存方法 | |
CN101848135B (zh) | 芯片的统计数据的管理方法和装置 | |
CN102130833A (zh) | 一种高速路由器流量管理芯片链表存储管理方法及系统 | |
CN100370784C (zh) | 用于分布式共享存储器分组交换机的带内消息同步 | |
CN100531085C (zh) | 利用以太网交换机媒体接入控制地址表空间的方法 | |
CN105516907A (zh) | 基于低功耗蓝牙技术的数据传输方法 | |
CN102223311A (zh) | 一种队列调度方法及装置 | |
CN103259745A (zh) | 一种用于网络编程中提高缓冲区内存使用率的设计方法 | |
CN108449398B (zh) | 一种面向对象数据交换协议的实现方法和电能表 | |
CN103731364A (zh) | 基于x86平台实现万兆大流量快速收包的方法 | |
CN102045262B (zh) | 媒体接入控制地址表更新方法、装置及网络设备 | |
CN101150525A (zh) | 缓存地址释放方法、系统及逻辑模块 | |
CN105357148A (zh) | 避免网络交换芯片输出报文乱序的方法及系统 | |
CN111126584B (zh) | 数据回写系统 | |
CN101534303B (zh) | 发送数据的方法、装置和单板 | |
CN102447604B (zh) | 路由表信息存储方法以及路由设备 | |
CN102541506A (zh) | 一种fifo数据缓存器、芯片以及设备 | |
CN101110771A (zh) | 在fdb表中添加下一跳mac地址的方法及fdb设备 | |
CN105188086B (zh) | 一种面向Epidemic路由算法的节点缓存释放的延迟容忍网络拥塞避免方法 | |
CN102868621A (zh) | 一种利用异步方式实现大容量路由快速写硬件的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130821 |
|
RJ01 | Rejection of invention patent application after publication |