代码之旅
03
关于async和await的探讨 关于async和await的探讨
缘起最近在看《深入解析C#(第4版)》这本书,看到了第五章,这一章节是关于异步。之前对异步这个概念只能算是一知半解,了解了它的概念和用法,但是对它的实际场景和为了解决什么问题而诞生的是不太清楚的。于是乎,就和小伙伴之间有了一场讨论。 概
2021-12-03
30
29
Go语言核心36讲-context.Context类型 Go语言核心36讲-context.Context类型
使用WaitGroup值的时候,我们最好用“先统一Add,再并发Done,最后Wait”的标准模式来构建协作流程。 如果在调用该值的Wait方法的同时,为了增大其计数器的值,而并发地调用该值的Add方法,那么就很可能会引发 panic。 这
2021-11-29
29
Go语言核心36讲-临时对象池sync.Pool Go语言核心36讲-临时对象池sync.Pool
sync.Pool类型可以被称为临时对象池,它的值可以被用来存储临时的对象。与 Go 语言的很多同步工具一样,sync.Pool类型也属于结构体类型,它的值在被真正使用之后,就不应该再被复制了。 这里的“临时对象”的意思是:不需要持久使用的
2021-11-29
26
25
25
Go语言核心36讲-错误处理(上) Go语言核心36讲-错误处理(上)
error类型其实是一个接口类型,也是一个 Go 语言的内建类型。在这个接口类型的声明中只包含了一个方法Error。Error方法不接受任何参数,但是会返回一个string类型的结果。它的作用是返回错误信息的字符串表示形式。 我们使用er
2021-11-25
24
Go语言核心36讲-原子操作(上) Go语言核心36讲-原子操作(上)
互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的 goroutine 只有一个。读写锁对共享资源的写操作和读操作则区别看待,并消除了读操作之间的互斥。 条件变量主要是用于协调想要访问共享资源的那些线程。当共享资源的状态发生变化时
2021-11-24
24
Go语言核心36讲-原子操作(下) Go语言核心36讲-原子操作(下)
今天的问题是:sync/atomic包中提供了几种原子操作?可操作的数据类型又有哪些?问题解析__第三个衍生问题__: 比较并交换操作与交换操作相比有什么不同?优势在哪里? 回答是:比较并交换操作即 CAS 操作,是有条件的交换操作,只有在
2021-11-24
24
Go语言核心36讲-条件变量sync.Cond(上) Go语言核心36讲-条件变量sync.Cond(上)
前导知识:条件变量与互斥锁我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。 条件变量并不是被用来保护临界区和共享资源的,它是用于协调想要访问共享资源的那些线程的。当共享
2021-11-24
24
23
Go语言核心36讲-sync.Mutex与sync.RWMutex Go语言核心36讲-sync.Mutex与sync.RWMutex
从本篇文章开始,我们将一起探讨 Go 语言自带标准库中一些比较核心的代码包。这会涉及这些代码包的标准用法、使用禁忌、背后原理以及周边的知识。 前导内容:竞态条件、临界区与同步工具我们首先要看的就是sync包。这里的“sync”的中文意思
2021-11-23
1 / 12