![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
go
文章平均质量分 53
8818766
这个作者很懒,什么都没留下…
展开
-
rpc及和http对比
Day1 实现了一个简易的客户端和服务端,支持消息的编码解码。对于rpc来说,双方在确定传输协议后(tcp),需要确定报文的编码格式(项目支持gob和json)。 编码格式的确认:以客户端举例,采用gob进行编码,而服务端并不知道客户端的编码方式,因此可以在请求报文前添加一个固定的json编码,编码内容:1. 标记请求是否为rpc请求。2. 报文的编码方式。 ...原创 2021-12-22 17:59:28 · 1289 阅读 · 0 评论 -
golang mutex和rwmutex
https://www.cnblogs.com/f-ck-need-u/p/9998729.html原创 2022-02-03 22:22:51 · 338 阅读 · 0 评论 -
go map底层
实现 map底层为哈希表,采用拉链法解决哈希冲突,主要出现的结构体有两个,一个叫hmap,一个叫bucket(bmap) Golang的map中用于存储的结构是bucket数组。 hmap和bucket的关系是这样的 而bucket又是一个链表,所以,整体的结构应该是这样的: go中数据经过hash后,得到一个hash值,Gol会把hash值分为高位和低位,低位用于寻找当前key属于hmap中的哪个bucket,高位用于寻找bucket中的哪个key。 扩容 会创建一个扩大一倍的bucket数组,并旧原创 2021-12-29 19:15:11 · 244 阅读 · 0 评论 -
go slice底层
slice的数据类型 Go 中数组为值类型,因此数组赋值和函数传参都是值复制的,即每次传参都用数组,那么每次数组都要被复制一遍,会导致大量内存占用。 如果用指针传递,万一原数组的指针指向更改了,那么函数里面的指针指向都会跟着更改。 因此slice采用引用类型,用切片传数组参数,既可以达到节约内存的目的,也可以达到合理处理好共享内存的问题。 slice的数据结构 切片的结构体由3部分构成,Pointer 是指向一个数组的指针,len 代表当前切片的长度,cap 是当前切片的容量。cap 总是大于等于 len原创 2021-12-29 16:55:10 · 156 阅读 · 0 评论 -
channel底层实现,无缓存和有缓存区别
Channel,发送一个数据到Channel 和 从Channel接收一个数据 都是 原子性的。而且Go的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存,前者就是传统的加锁,后者就是Channel。也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然是安全的 原因 channel内部维护了一个互斥锁,来保证线程安全 type hchan struct { qcount uint // total data in the queue data.原创 2021-11-04 23:36:17 · 680 阅读 · 0 评论 -
go中make和new的区别,为什么小对象多了会造成gc压力,无缓冲 Chan 的发送和接收是否同步
区别 make和new都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值),会返回一个相应类型的值;而new用于类型的内存分配,并且内存置为零,会返回一个相应类型的指针 。make返回的是引用类型本身;而new返回的是指向类型的指针。 make是引用类型的初始化方法 ...原创 2021-11-04 23:26:35 · 666 阅读 · 0 评论 -
go垃圾回收GC,内存泄漏
link原创 2021-10-12 10:14:26 · 62 阅读 · 0 评论 -
Golang调度器GPM原理与调度分析
简单 详细原创 2021-10-12 10:11:11 · 231 阅读 · 0 评论