![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java-go
文章平均质量分 63
tydhot
gogogo
展开
-
Golang sync.pool对象池
概览Goalng中通过sync.pool提供了对象池的实现来达到对象复用的目的。在netty中,也通过Recycle类实现了类似的对象池实现。在netty的对象池Recycle中,当A线程需要将B线程申请的对象回收到对象池中的时候,会专门开辟一个专门由A线程回收到B线程的队列,以避免回收对象的时候所发生的资源竞争。类似的,在golang的对象池sync.pool中也是通过类似的思想来实现所要达到的目的。sync.pool的结构type Pool struct { noCopy noCopy //原创 2021-06-29 16:04:54 · 678 阅读 · 2 评论 -
golang sync.map
在golang中,线程安全的map实现为sync.Map,相较于java中线程安全的map ConcurrentHashMap,在设计与实现上都有巨大的差别。java中的ConcurrentHashMapjava中的ConcurrentHashMap为了实现线程安全,在1.7当中,通过分段锁的实现达到了这一目的,区别于HashTable的全部阻塞操作,分段锁的设计在一定程度上提升了在并发场景下的访问性能。在1.8的过程中,锁的粒度被进一步降低,被缩小到了一个HashEntry首节点的地步,并通过在一定长原创 2021-06-29 16:04:22 · 635 阅读 · 0 评论 -
Golang heap源码简单走读
golang heap小根堆源码走读heap概览在golang中,通过heap给出了一个实现小根堆的接口。type Interface interface { sort.Interface Push(x interface{}) Pop() interface{} }由于小根堆中,需要根据容器中的元素大小来进行比较以确定元素在堆中的位置。因此也需要实现sort的接口。type Interface interface { Len() int Less(i, j int) bool原创 2021-06-10 22:48:35 · 450 阅读 · 1 评论 -
Golang list双向链表源码走读
list概览list为golang中的双向链表实现,存入list中的元素都会被封装成list中的节点放到双向链表中进行存储。简单的list使用代码如下:func main() { list := list.New() fmt.Println("list length is " + strconv.Itoa(list.Len())) list.PushBack(1) list.PushBack(2) list.PushBack(3) fmt.Println("list length is原创 2021-06-08 00:34:12 · 239 阅读 · 1 评论