go
共 13 篇文章
go-7
go语言基础学习七 GMP能不能去掉P层?会怎么样# 每个 P 有自己的本地队列,大幅度的减轻了对全局队列的直接依赖,所带来的效果就是锁竞争的减少。而 GM 模型的性能开销大头就是锁竞争。 每个 P 相对的平衡上,在 GMP 模型中也实现了 Work Stealing 算法,如果 P 的本地队列为空
go-9
go语言基础学习九 channel底层实现?是否线程安全# hchan 结构体# type hchan struct { qcount uint // 队列中当前的数据元素总数 dataqsiz uint // 循环队列的容量(缓冲区大小) bu
go-10
go语言基础学习十 map的底层实现# map结构# type hmap struct { count int // map元素个数,len()取值 B uint8 // 桶数量=2^B noverflow uint16 //
go-8
go语言基础学习八 goroutine什么情况会发生内存泄漏?如何避免# 定义:# 多个 goroutine 并发读写同一个共享变量,且没有同步保护,读写时序不确定,导致结果随机错误,就是竞态。 常见触发场景# 共享全局 / 结构体成员变量并发读写(最普遍) map 并发写:map 非并发安全,多
go-11
go语言基础学习十一 go的interface怎么实现的?# 空接口# type eface struct { _type *_type // 类型元数据 data unsafe.Pointer // 数据指针 } _type:存放类型信息(大小、对齐、类型名称、反射
go-12
go语言基础学习十二 说说context包的作用?你用过哪些,原理知道吗?# context 是 Go 标准库用于跨协程传递上下文的工具# 传递取消信号:优雅终止下游 Goroutine、请求、任务(避免协程泄露) 传递超时 / 截止时间:控制任务最大执行时长,防止服务卡死 传递请求元数据:链路追踪
go-six
go语言基础学习六 简述go内存管理机制# TCMalloc 核心思想# 分层缓存:线程私有缓存 + 全局中心缓存 + 堆,优先本地无锁分配# 线程私有缓存(对应 Go:mcache/P 私有)# 每个线程自用一小块内存池,分配不用加锁,最快,不够再找上层。 全局中心缓存(对应 Go:mcentra
go-13
go语言基础学习十三 sync.Pool有什么用途?# 一、用途# 缓存短期临时对象([] byte、临时结构体),复用内存 减少频繁堆分配,降低 GC 压力,提升高并发性能 协程安全,无需手动加锁 二、原理# 结构:每个 P 独立poolLocal(1 个无锁 private + 共享链表 sha
go-five
--- title: "go语言基础学习五" --- # Go面向对象是如何实现的# Go实现面向对象的两个关键是struct和interface ## 封装# 封装:对于同一个包,对象对包内的文件可见;对不同的包,需要将对象以大写开头才是可见的。 ## 继承# 继承:继承是编译时特征,在struc
go-learn
--- title: "go语言基础学习一" --- # defer 的执行顺序# defer的执行顺序类似于栈,后进先出: defer若要修改return的返回数据,需要使用指针 不然return的返回值不会生被修改。 因为return会在defer执行前暂存要返回的数据 \`\`\`go //