GMP
进程 线程 协程 进程是资源分配单位,有独立内存空间; 线程是调度单位,共享进程内存,但有独立栈; 协程是用户态轻量线程,由程序调度,切换极快,一个线程可跑几万协程 进程(Process) 是操作系统 资源分配 的最小单位。 每个进程拥有独立的地址空间、文件描述符、堆、栈等资源。 进程间切换代价最大…
TOPIC
7 篇相关文章
进程 线程 协程 进程是资源分配单位,有独立内存空间; 线程是调度单位,共享进程内存,但有独立栈; 协程是用户态轻量线程,由程序调度,切换极快,一个线程可跑几万协程 进程(Process) 是操作系统 资源分配 的最小单位。 每个进程拥有独立的地址空间、文件描述符、堆、栈等资源。 进程间切换代价最大…
go的map 底层数据结构 go使用拉链法实现了hashMap slot中有多个bucket 每个bucket中存放,hash后 得mod相同的k&v 每一个bucket中存放hash key的高8bit 桶超出8个数据后,机会将数据存储在溢出桶中 扩容过程 为什么需要扩容 map的溢出桶太多会严重…
channel不能被重复关闭,那么该如何避免重复关闭? 方法一:利用closed channel读取的特性 方法二:利用sync once 来保证channel最多被关闭一次 方法三:利用标记位
数据结构 channel的地层数据结构为 hchan waitq为阻塞的协程队列 sudog用于包装协程的节点 其中的 mutex 是runtime包中,给系统运行时使用的互斥锁,使用更加地层,其直接基于semaphore原语 0表示未锁定 1表示锁定 其他值表示有等待者 每次调用semaphore…
正常模式 两种策略 阻塞/唤醒:将当前goroutine阻塞挂起,直到锁被释放后,以回调的方式将阻塞goroutine重新唤醒,进行锁的争抢 使用场景:并发竞争激烈 优势:精准打击,不浪费时间片 劣势:需要挂起协程,进行上下文切换,操作比较重 自旋+CAS:基于自旋结合CAS的方式,反复校验锁的状态…
是什么 在 Go 语言中, sync/atomic 包提供了底层的原子操作,用于对整数类型和指针类型进行原子性的读写和修改 原子操作是不可分割的操作,确保多个 goroutine 并发访问共享数据时,操作不会被中断 CPU指令级别的支持 现代CPU架构提供了一组专门的指令,用于支持原子操作。 这些指…
前沿 操作系统中存储模型 虚拟内存和物理内存 虚拟内存的意义 在用户和硬件间添加中间代理层 优化用户体验(进程感知到内存是”连续”的,如果没有虚拟内存,程序就需要自己主动维护真实的物理内存) “放大” 可用内存(虚拟内存可用由物理内存+磁盘补充,根据冷热动态置换,用户无感知) Golang 内存模型…