最新 最热

golang源码分析:boltdb(3)

可用的空闲页号信息存储在freelist中,具体位于freelist.go文件中,定义如下:

2023-09-06
1

golang源码分析:cayley(1)

https://github.com/cayleygraph/cayley是go实现的一个图数据库,它支持多种后端存储,包括mysql,boltdb甚至是elasticsearch。下面我们先学习下如何使用它。

2023-09-06
1

golang源码分析:groupcache(2)

介绍完github.com/golang/groupcache如何使用和基本原理后,我们来分析下它的源码。初始化的代码位于groupcache.go

2023-09-06
2

golang源码分析:boltdb(1)

boltdb是golang实现的一个基于b+树的存储系统,通过mvcc实现了单个写事务和多个读事务并发。结构也很清晰,由于比较稳定,已经归档,确实是学习数据库的最佳选择。而且不少出名的开源项目在使用它,比如etcd,InfluxDB等。下面我...

2023-09-06
2

golang源码分析:fastcache

https://github.com/VictoriaMetrics/fastcache是一个使用循环缓冲区(RingBuffer)的缓存库,因使用RingBuffer结构,所以没有GC开销。Fastcache在创建期间达到设置的最大大小时会自动驱逐旧条目,线程安全的,键和值都是byte sl...

2023-09-06
2

golang源码分析:groupcache(1)

github.com/golang/groupcache 存储的是kv结构,同是memcache作者出品.在放弃update/delete 的特性后,换来的是:Cluster 的能力,处理热点的能力。

2023-09-06
1

golang源码分析:freecache

github.com/coocood/freecache采用分片(shard)设计,划分了256个segments;每个分片都有自己独立的锁。实现类似于bigcache的索引操作,slotsData存放索引,RingBuf存放具体数据;只存在 512 个指针(每个segments两个指针,slotsDa.....

2023-09-06
1

golang源码分析:go-cache

github.com/patrickmn/go-cache是知名golang local cache实现里面最简单的一种,可以理解为就是简单的map加锁实现的,它通过定时器来进行过期key的淘汰,并且利用runtime.SetFinalizer(C, stopJanitor)来停止我们的过期key...

2023-09-06
2

golang源码分析:uber-go/goleak检查goroutine泄漏原理

https://github.com/uber-go/goleak是一个检测goroutine泄漏的工具,首先我们看下如何使用,然后分析下源码实现,看看它的具体原理。起一个groutine泄漏的例子。

2023-09-06
4

golang源码分析:runtime.SetFinalizer

当我们希望在对象被gc之前,做一些资源释放的工作,类似,函数返回之前执行defer操作一样,我们可以使用 runtime.SetFinalizer,它会在gc周期到来的时候,检查下对象有没有引用,如果没有引用,起一个协程,执行绑定的资源释放函数。...

2023-09-06
2