map数据结构
在介绍map
之前,先来看看它的数据结构,map
实际上就是一个散列表,指向一堆桶buckets
。通过哈希函数计算出key
的值,然后再存储到每个桶bmap
中,每个bmap
可以存储 8 组键值对。为了加速hash
定位桶,bmap
里记录了tophash
数组,记录了key
的哈希高 8 位,通过比较不同键的哈希的高 8 位可以减少访问键值对的次数。
内部结构图:
Coding...
Golang 中的并发指的是一个函数拥有独立于其他函数运行的能力,当创建一个goroutine
时,Go 会将其视为一个独立的工作单元,然后会被调度到可用的逻辑处理器上执行。 Go 语言运行时的调度器能够管理所有的goroutine
并为其分配执行时间。调度器是在操作系统之上的,将操作系统的线程与程序运行时的逻辑处理器绑定,并在逻辑处理器上运行goroutine
。调度器在任何给定的时间,都会控制哪个goroutine
在哪个逻辑处理器上执行。
Golang 的并发同步模型来自一个叫做通讯顺序程序(Communicating Sequential Processes, CSP)的范型。CSP
是一种消息传递模型。在goroutine
之间同步和传递数据是通过通道channel
实现的,而不是通过对数据加锁来实现同步访问。