在前面的文章中,我们分析到Mutex在休眠g和唤醒g分别用到了runtime_SemacquireMutex和runtime_Semrelease,接下来简单分析这两个函数的源码。 SemacquireMutex其源码对应runtime#s … 继续阅读 sync.Mutex 源码分析(三)
Month: 2022年11月
sync.Mutex 源码分析(二)
接下来我们分析Mutex的源码: Mutex采用了一个int32类型的字段:state来描述当前锁的状态,包括: 当前mutex是否被持有 是否当前已经唤醒了一个goroutine 是否处于饥饿状态 当前等待唤醒的goroutine数量 其 … 继续阅读 sync.Mutex 源码分析(二)
sync.Mutex 源码分析(一)
今天我们看下mutex。 在golang中,互斥锁由sync.Mutex实现,其仅包含两个方法,使用如下: mutext.Lock() //临界区 mutext.UnLock() 虽然仅仅两个方法,但是如果不了解Mutex的特性,则很容易在 … 继续阅读 sync.Mutex 源码分析(一)
golang netpoll 源码分析
在之前讲解goroutine的时候,我们说过,想要实现goroutine,必须解决的一个问题便是系统IO,系统调用不能长时间阻塞M,否则随着M的阻塞与新的M创建,协程会退化为线程导致系统负载过高。 golang选择的解决方案是重构网络库代码 … 继续阅读 golang netpoll 源码分析