网络缓冲区的4种实现方法

一、概述

网络缓冲区用于缓冲待发送的数据或接收了待处理的数据,发送缓冲区可以积累一定量的数据再发送,接收缓冲区可以积累一定量的数据,解决粘包导致的没有收到完整的数据包,缓冲起来等包数据完整了再提交给业务逻辑处理。

二、实现方案

根据我的经验,这里将介绍四种实现机制,包括单块连续内存缓冲,环形缓冲,环形分块缓冲,链表分块缓冲。

1. 单块连续内存缓冲
单块连续缓冲是最简单地实现机制。这种方案采取一块连续的内存来作为缓冲区,随着数据的写入和读取,有效数据块会逐渐往后移动,在合适的时机把整块有效数据移动到头部。如果整块内存都被写完,也可以新分配一块更大内存,并把老的块上数据拷贝过来,并释放掉老的块,具体的实现,看下图。
在这里插入图片描述

2. 环形缓冲区
环形缓冲区也是一块连续内存,与第一种方案的区别是end到达内存块尾部时,end可以移动到块的头部,可以无限接近start,但不会超过start。相比第一种方案,当数据写到内存块得的尾部时,不需要拷贝整块有效数据到头部。如果环形缓冲区是固定大小,支持一个线程读,另一个线程写的无锁操作。
在这里插入图片描述
3

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值