17、请求合并和循环栅栏该怎么用?你好,我是鸟窝。 这节课,我来给你介绍两个非常重要的扩展并发原语:SingleFlight和CyclicBarrier。SingleFlight的作用是将并发请求合并成一个请求,以减少对下层服务的压力;而CyclicBarrier是一个可重用的栅栏并...2025-10-28Go 并发编程实战课
16、一篇文章搞懂信号量Semaphore你好,我是鸟窝。 在前面的课程里,我们学习了标准库的并发原语、原子操作和Channel,掌握了这些,你就可以解决80%的并发编程问题了。但是,如果你要想进一步提升你的并发编程能力,就需要学习一些第三方库。 所以,在接下来的几节课里,我会给你分享Go官...2025-10-28Go 并发编程实战课
15、Go如何保证并发读写的顺序?你好,我是鸟窝。 Go官方文档里专门介绍了Go的内存模型,你不要误解这里的内存模型的含义,它并不是指Go对象的内存分配、内存回收和内存整理的规范,它描述的是并发环境中多goroutine读相同变量的时候,变量的可见性条件。具体点说,就是指,在什么条件...2025-10-28Go 并发编程实战课
14、Channel典型的应用模式你好,我是鸟窝。 前一讲,我介绍了Channel的基础知识,并且总结了几种应用场景。这一讲,我将通过实例的方式,带你逐个学习Channel解决这些问题的方法,帮你巩固和完全掌握它的用法。 在开始上课之前,我先补充一个知识点:通过反射的方式执行sele...2025-10-28Go 并发编程实战课
13、另辟蹊径,解决并发问题你好,我是鸟窝。 Channel是Go语言内建的first-class类型,也是Go语言与众不同的特性之一。Go语言的Channel设计精巧简单,以至于也有人用其它语言编写了类似Go风格的Channel库,比如docker/libchan、...2025-10-28Go 并发编程实战课
12、如何保证原子操作你好,我是鸟窝。 前面我们在学习Mutex、RWMutex等并发原语的实现时,你可以看到,最底层是通过atomic包中的一些原子操作来实现的。当时,为了让你的注意力集中在这些原语的功能实现上,我并没有展开介绍这些原子操作是干什么用的。 你可能会说,这...2025-10-28Go 并发编程实战课
11、Context信息穿透上下文你好,我是鸟窝。 在这节课正式开始之前,我想先带你看一个工作中的场景。 假设有一天你进入办公室,突然同事们都围住你,然后大喊“小王小王你最帅”,此时你可能一头雾水,只能尴尬地笑笑。为啥呢?因为你缺少上下文的信息,不知道之前发生了什么。 但是,如果同事...2025-10-28Go 并发编程实战课
10、Pool-性能提升大杀器你好,我是鸟窝。 Go是一个自动垃圾回收的编程语言,采用三色并发标记算法标记对象并回收。和其它没有自动垃圾回收的编程语言不同,使用Go语言创建对象的时候,我们没有回收/释放的心理负担,想用就用,想创建就创建。 但是,如果你想使用Go开发一个...2025-10-28Go 并发编程实战课
9、如何实现线程安全的map类型?你好,我是鸟窝。 哈希表(Hash Table)这个数据结构,我们已经非常熟悉了。它实现的就是key-value之间的映射关系,主要提供的方法包括Add、Lookup、Delete等。因为这种数据结构是一个基础的数据结构,每个key都会有一个唯一的索...2025-10-28Go 并发编程实战课
8、Once并发原语你好,我是鸟窝。 这一讲我来讲一个简单的并发原语:Once。为什么要学习Once呢?我先给你答案:Once可以用来执行且仅仅执行一次动作,常常用于单例对象的初始化场景。 那这节课,我们就从对单例对象进行初始化这件事儿说起。 初始化单例资源有很多方法,...2025-10-28Go 并发编程实战课