博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go实现Ringbuf
阅读量:7035 次
发布时间:2019-06-28

本文共 1041 字,大约阅读时间需要 3 分钟。

hot3.png

Ring buffer算法优点:高内存使用率,在缓冲buffer内存模型中,不太容易发生内存越界、悬空指针等 bug ,出了问题也容易在内存级别分析调试。做出来的系统容易保持健壮。

package mainimport (	"bytes"	"fmt")type Ringbuf struct {	buf         []byte	start, size int}func New(size int) *Ringbuf {	return &Ringbuf{make([]byte, size), 0, 0}}func (r *Ringbuf) Write(b []byte) {	for len(b) > 0 {		start := (r.start + r.size) % len(r.buf)		n := copy(r.buf[start:], b)		b = b[n:] //golang就是要好好运用切片		if r.size >= len(r.buf) {			if n <= len(r.buf) {				r.start += n				if r.start >= len(r.buf) {					r.start = 0				}			} else {				r.start = 0			}		}		r.size += n		// Size can't exceed the capacity		if r.size > cap(r.buf) {			r.size = cap(r.buf)		}	}}func (r *Ringbuf) Read(b []byte) int {	read := 0	size := r.size	start := r.start	for len(b) > 0 && size > 0 {		end := start + size		if end > len(r.buf) {			end = len(r.buf)		}		n := copy(b, r.buf[start:end])		size -= n		read += n		b = b[n:]		start = (start + n) % len(r.buf)	}	return read}func (r *Ringbuf) Size() int {	return r.size}

 

转载于:https://my.oschina.net/yang1992/blog/519576

你可能感兴趣的文章
硬派计费免费社区版 V4.0 正式发布
查看>>
开源免费的C/C++网络库(c/c++ sockets library)
查看>>
Nagios监控平台(转)
查看>>
firfox 中onpropertychange的替换方案
查看>>
代码分析工具findbug简介和使用
查看>>
Jquery UI Tabs 获取选中Tab的ID
查看>>
Android Wear开发系列教程——搭建开发环境
查看>>
如何更好地学习dubbo源代码
查看>>
IE、Chrome、Firefox修改http header信息
查看>>
跨平台网络通信与服务器编程框架库(acl库)介绍
查看>>
利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
查看>>
mOrmot 服务端 方法 代码载录
查看>>
php 查找父类所有的子类
查看>>
FAT32中文版分析+补充
查看>>
php 生成 桌面快捷链接
查看>>
使用maven构建android 的apk包并自动签名
查看>>
objective - c 内存管理机制
查看>>
mysql修改表名
查看>>
Spark操作mysql
查看>>
couchDB简介2
查看>>