Go语言核心36讲-并发安全字典sync.Map (上)今天再来讲一个并发安全的高级数据结构:sync.Map。众所周知,Go 语言自带的字典类型map并不是并发安全的。 前导知识:并发安全字典诞生史换句话说,在同一时间段内,让不同 goroutine 中的代码,对同一个字典进行读写操作是不2021-11-30 笔记笔记 go Go语言核心36讲
Go语言核心36讲-context.Context类型使用WaitGroup值的时候,我们最好用“先统一Add,再并发Done,最后Wait”的标准模式来构建协作流程。 如果在调用该值的Wait方法的同时,为了增大其计数器的值,而并发地调用该值的Add方法,那么就很可能会引发 panic。 这2021-11-29 笔记笔记 go Go语言核心36讲
Go语言核心36讲-临时对象池sync.Poolsync.Pool类型可以被称为临时对象池,它的值可以被用来存储临时的对象。与 Go 语言的很多同步工具一样,sync.Pool类型也属于结构体类型,它的值在被真正使用之后,就不应该再被复制了。 这里的“临时对象”的意思是:不需要持久使用的2021-11-29 笔记笔记 go Go语言核心36讲
Go语言核心36讲-sync.WaitGroup和sync.Once之前在一些场合下里,我们使用通道的方式看起来都似乎有些蹩脚。 比如:声明一个通道,使它的容量与我们手动启用的 goroutine 的数量相同,之后再利用这个通道,让主 goroutine 等待其他 goroutine 的运行结束。 这一步更2021-11-26 笔记笔记 go Go语言核心36讲
Go语言核心36讲-panic函数、recover函数以及defer语句(上)Go 语言的另外一种错误处理方式,不过,严格来说,它处理的不是错误,而是一场,并且时一种在我们意料之外的程序异常。 前导知识:运行时恐慌 panic这种程序异常被叫做 panic,我把它翻译为运行时恐慌。其中的“恐慌”二字是由 pani2021-11-25 笔记笔记 go Go语言核心36讲
Go语言核心36讲-错误处理(上)error类型其实是一个接口类型,也是一个 Go 语言的内建类型。在这个接口类型的声明中只包含了一个方法Error。Error方法不接受任何参数,但是会返回一个string类型的结果。它的作用是返回错误信息的字符串表示形式。 我们使用er2021-11-25 笔记笔记 go Go语言核心36讲
Go语言核心36讲-原子操作(上)互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的 goroutine 只有一个。读写锁对共享资源的写操作和读操作则区别看待,并消除了读操作之间的互斥。 条件变量主要是用于协调想要访问共享资源的那些线程。当共享资源的状态发生变化时2021-11-24 笔记笔记 go Go语言核心36讲
Go语言核心36讲-原子操作(下)今天的问题是:sync/atomic包中提供了几种原子操作?可操作的数据类型又有哪些?问题解析__第三个衍生问题__: 比较并交换操作与交换操作相比有什么不同?优势在哪里? 回答是:比较并交换操作即 CAS 操作,是有条件的交换操作,只有在2021-11-24 笔记笔记 go Go语言核心36讲
Go语言核心36讲-条件变量sync.Cond(上)前导知识:条件变量与互斥锁我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。 条件变量并不是被用来保护临界区和共享资源的,它是用于协调想要访问共享资源的那些线程的。当共享2021-11-24 笔记笔记 go Go语言核心36讲
Go语言核心36讲-条件变量sync.Cond(下)知识扩展问题 1:条件变量的Wait方法做了什么?在了解了条件变量的使用方式之后,你可能会有这么几个疑问。 为什么先要锁定条件变量基于的互斥锁,才能调用它的Wait方法? 为什么要用for语句来包裹调用其Wait方法的表达式,用if语句不2021-11-24 笔记笔记 go Go语言核心36讲
Go语言核心36讲-sync.Mutex与sync.RWMutex从本篇文章开始,我们将一起探讨 Go 语言自带标准库中一些比较核心的代码包。这会涉及这些代码包的标准用法、使用禁忌、背后原理以及周边的知识。 前导内容:竞态条件、临界区与同步工具我们首先要看的就是sync包。这里的“sync”的中文意思2021-11-23 笔记笔记 go Go语言核心36讲
Go语言核心36讲-更多的测试手法在本篇文章,我会继续为你讲解更多更高级的测试方法。这会涉及testing包中更多的 API、go test命令支持的,更多标记更加复杂的测试结果,以及测试覆盖度分析等等。 前导内容:-cpu 的功能go test命令的标记-cpu,它是2021-11-23 笔记笔记 go Go语言核心36讲