贾永琪的技术博客

Go-知识测试-工作机制

在 Go 语言的源码中,go test 命令的实现主要在 src/cmd/go/internal/test 包中。当你运行 go test 命令时,Go 的命令行工具会调用这个包中的代码来执行测试。在 src/cmd/go/internal/test 包中,runTest 函数是 go test 命令的主要入口点。这个函数负责解析命令行参数,构建测试的二进制文件,启动这个二进制文件,以及读取和解析测试结果。_go test

Go-知识并发控制RWMutex

互斥锁 Mutex 是串行加锁,拿到锁之后,不管是读操作还是写操作,对于 Mutex 来说,是等价的。但是在并发里面,如果仅仅是读操作,不改变数据的前提下,是可以共享的,多个协程读取到的数据都是可信的。写锁需要阻塞写锁: 一个协程拥有写锁时,其他协程写操作需要阻塞写锁需要阻塞读锁: 一个协程拥有写锁时,其他协程读操作需要阻塞读锁需要阻塞写锁: 一个协程拥有读锁时,其他协程写操作需要阻塞读锁不能阻塞读锁: 一个协程拥有读锁时,其他协程读操作不需要阻塞。_go rwmutex

Go-知识并发控制mutex

互斥锁是并发程序中对共享资源进行访问控制的主要手段,Go 语言提供了非常简单易用的 Mutex。Mutex 是结构体类型,对外暴露了 Lock 和 Unlock 两个方法,用于加锁和解锁。自旋对应于CPU的PAUSE指令,CPU对该指令什么都不做,相当于CPU空转,对程序而言相当于sleep了一小段时间,时间非常短,当前实现是 30个时钟周期。自旋过程中会持续探测 Locked 是否变为0 ,连续两次探测奸恶就是在执行这些 PAUSE 指令,不同于sleep,不需要将协程转为睡眠状态。_go mutex

Go-知识并发控制Context

Go 语言的 context 是应用开发常用的并发控制技术,它与 WaitGroup 最大的不同点是 context对于派生 goroutine 有更强的控制力,可以控制多级的 goroutine。context 翻译成中文是 上下文 ,即可以控制一组呈树状结构的 goroutine ,每个 goroutine 拥有相同的上下文。上图中由于 goroutine 派生出子 goroutine ,而子 goroutine 又继续派生出新的 goroutine ,_go并发 context

Go-知识并发控制WaitGroup

WaitGroup 通常用于等待一组“工作协程”结束的场景,其内部维护两个计数器,可以称为“工作协程”计数器和“等待协程”计数器。Add(delta int) 方法用于增加“工作协程”计数,通常在启动新的“工作协程”之前调用。Done 方法用于减少“工作协程”计数,每次调用递减1,通常在“工作协程”内部且在临近返回之前调用。Wait 方法用于增加“等待协程”计数,通常在所有“工作协程”全部启动之后调用。_go waitgroup