首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
必知必会系列
低飞的蜜蜂
创建于2023-11-25
订阅专栏
知道你应该知道的~
等 14 人订阅
共18篇文章
创建于2023-11-25
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
go 内存分配优化
常驻内存需要维护一个只读map[string]any,有没有优化手段? 由于 go底层字符串的实现会包含一个指针,大量的字符串持有会 加重GC扫描负担 优化思路: 将所有的字符串都保存在byte数组中
go源码中 CAS 是如何实现的?
go源码中 CAS 是如何实现的?plan9汇编又是什么呢? FP PC SB SP 又是什么? go中代码如何引入汇编代码呢?
我该怎么等你: sync.WaitGroup
你们(子协程)都在干活,我(主程序)该怎么等你们呀? 是我先休息一会儿还是基于channel的通信机制呢?还是...有其他的方式呢?
结构体转换怎么才算优雅
在不同的包下定义了一些结构体 其所有字段都相同(内存布局完全一致),但是他们却属于不同的结构体 所以经常需要在这些结构体之间来回转换,有哪些实现思路?
听说map删除元素占用竟然不会减少?
map底层实现是什么? map什么情况下会扩容,扩容原理是什么? map为什么有时候会报并发读写错误? 未初始化的map读取会发生什么? map遍历顺序为什么是随机的? map删除元素 内存占用会变吗
防缓存击穿神器: singleflight
当某个热 key 缓存失效时, 会有大量的请求直接请求mysql导致缓存击穿。这种问题应该如何缓解呢? 防缓存击穿神器: singleflight便派上用场啦~~
神奇的atomic.Value
atomic.Value 原子地设置和读取变量 不能用atomic.Value原子值存储nil 第一次向原子值存储值,决定了它今后能且只能存储该类型的值
本地去重怎么实现?
给定一个数组 如何保证访问数组中的元素实现 有且仅有一次的语义? 很容易想到使用一个map记录对应的访问状态。那么还有没有比map占用空间更小的实现方式呢?并发访问如何保证安全呢?
必知必会系列-sync.RWMutex
优化读多写少的场景 读锁请求无需获取互斥锁 采用FIFO的设计思想,一旦有写者尝试获取锁,后续的写者和读者都会被阻塞,防止写锁饥饿 使用信号量实现阻塞与唤醒语义
必知必会系列-Channel
不要通过共享内存来通信,而是要通过通信来实现共享内存。通过通道发送和接收数据可以解耦消费者和生产者。
go原来还可以这么玩?
每天一个go优化小知识,每天进步一点点~ 1. 非指针区域GC不扫描 2. padding的方式避免false sharing 3. ...
结构体中interface类型字段如何正确赋值?
结构体中interface类型字段如何正确赋值? 是利用RawMessage实现延迟赋值还是...?
必知必会系列-sync.Map
通过学习sync.Map的实现,可以学习以下性能优化的方向和技巧 1. 成本分摊: 将一个明确的内存拷贝成本 变成 后续调用可能触发的内存拷贝成本 2. 针对读多写少的场景,优化读取性能(尽量无锁化)
必知必会系列-sync.Pool
通过学习sync.Pool的实现,可以学习下到很多性能优化的方向和技巧: 比如避免如何伪共享,如何降低并发冲突概率
必知必会系列-interface
go 接口底层长啥样? 反射三大定律是啥? 反射中IsNil CanSet CanAddr又代表着什么? 为什么说接口断言很慢? iface和eface有什么区别? 静态语言go是如何实现动态分发?
必知必会系列-sync.Mutex
Mutex锁分为两种模式: 正常模式和饥饿模式。正常模式下,新加入的协程,要么抢到锁,直接结束; 要么抢不到锁,追加到等待队列尾部,等待被唤醒。饥饿模式下,只能追加到等待队列尾,等待被唤醒。
必知必会系列-Context
上下文context.Context与 Goroutine 有比较密切的关系,是 Go 语言中独特的设计。
必知必会系列-Unsafe
Unsafe 可以绕过Go的内存安全机制,直接对内存进行读写,所以有时候因为性能的需要,会冒一些风险使用该包,对内存进行操作