一文读懂 Go sync.Cond 设计

2021-10-27
阅读 7 分钟
5.5k
Go 语言通过 go 关键字开启 goroutine 让开发者可以轻松地实现并发编程,而并发程序的有效运行,往往离不开 sync 包的保驾护航。目前,sync 包的赋能列表包括: sync.atomic 下的原子操作、sync.Map 并发安全 map、sync.Mutex 与 sync.RWMutex 提供的互斥锁与读写锁、sync.Pool 复用对象池、sync.Once 单例模式、 sync.W...

详解 Go 中 WaitGroup 设计

2021-09-08
阅读 8 分钟
4k
Go语言提供的协程goroutine可以让我们很容易地写出多线程程序,但是,如何让这些并发执行的goroutine得到有效地控制,这是我们需要探讨的问题。正如小菜刀在《Golang并发控制简述》中所述,Go标准库为我们提供的同步原语中,锁与原子操作注重控制goroutine之间的数据安全,WaitGroup、channel与Context控制的是它们的并...

Go append 扩容机制

2021-07-27
阅读 9 分钟
6.6k
为什么结果不是5,不是8,而是6呢?由于小菜刀在该文中关于扩容的描述不够准确,让读者产生了疑惑。因此本文想借此机会细致分析一下append函数及其背后的扩容机制。

Go精妙的互斥锁设计

2021-07-26
阅读 11 分钟
2.1k
Some people, when confronted with a problem, think, “I know, I’ll use threads,” and then two they hav erpoblesms.

一文读懂Channel设计

2020-11-25
阅读 13 分钟
3.8k
现代操作系统中为我们提供了三种基本的构造并发程序的方法:多进程、I/O多路复用和多线程。其中最简单的构造方式当属多进程,但是多进程的并发程序,由于对进程控制和进程间通信开销巨大,这样的并发方式往往会很慢。