Golang 底层实现之sync.map

之前在文章《Golang 底层实现之map》里介绍过map在高并发场景下赋值or更新时会检查其标志位flags,当有其他协程在进行“写”操作时会触发panic。 通常为了避免程序出现预期之外的并发读写问题,我们会对map进行加锁保护,或者直接使用官方提供的并发安全map——sync....

三月 19, 2025 · 4 分钟 · 1695 字 · ZhangYong

Golang 底层实现之map

Map的实现原理 golang 的 map 底层是哈希表查找,平均查找效率是 O(1),最差是 O(N) go源码 在源码中,表示 map 的结构体是 hmap,它是 hashmap 的“缩写”: // A header for a Go map. type hmap struct { count int // 元素个数,调用 len(map) 时,直接返回此值 flags uint8 B uint8 // buckets 的对数 log_2 noverflow uint16 // overflow 的 bucket 近似数,做扩容决策II的判断 hash0 uint32 // hash seed buckets unsafe.Pointer // 指向 buckets 数组...

十二月 20, 2024 · 14 分钟 · 6600 字 · ZhangYong

PHP 底层实现之数组

曾经听前同事讲过一句话「PHP的精髓是他的数组」。 彼时年龄和经验都尚浅,对这句话体会不是很深。但自从开始写golang,我是越来越怀念PHP数组那种简单、粗暴的,不管三七二十一,拿来直接往里面塞的编码体验了。 于是,便有了这篇探索PHP到底是如何实现这个能够「容纳万物」的数据类型的...

十一月 15, 2024 · 10 分钟 · 4709 字 · ZhangYong

Hyperf/Crontab 组件源码解析

前置阅读:Hyperf/Crontab使用文档 前置阅读:Hyperf/Process自定义进程使用文档 前置阅读:Hyperf事件机制 写在开头 之前做项目用到了Hyperf/Crontab组件来进行秒级的数据清洗,最近又在做定时任务的拆分,于是就打算过一遍组件源码加深理解,顺便构思一...

六月 2, 2020 · 4 分钟 · 1895 字 · ZhangYong