- 课程目录
- 课程介绍
-
在线阅读:开篇词 | 想吃透Go并发编程,你得这样学!
Go并发编程涉及到的内容非常多。如果你想拥有极强的作战力,就要修炼内功。这门课,就是你的修炼山洞。
-
01 | Mutex:如何解决资源并发访问问题?
这节课主要介绍了标准库中Mutex的使用、最佳实践以及通过race detector工具发现计数器程序的问题。
-
02 | Mutex:庖丁解牛看实现
从一个简单易于理解的互斥锁的实现,到一个非常复杂的数据结构,这是一个逐步完善的过程。
-
03|Mutex:4种易错场景大盘点
使用Mutex常见的错误场景有4类,分别是Lock/Unlock不是成对出现、Copy已使用的Mutex、重入和死锁。
-
04| Mutex:骇客编程,如何拓展额外功能?
在一些特定的场景中,光知道互斥锁的基础功能是不足以应对的。这个时候,我们就需要开发一些扩展功能了。
-
05| RWMutex:读写锁的实现原理及避坑指南
我会给你介绍读写锁的使用场景、实现原理以及容易掉入的坑,你一定要记住这些陷阱,避免在实际的开发中犯相同的错误。
-
06 | WaitGroup:协同等待,任务编排利器
其实,WaitGroup很简单,就是package sync用来做任务编排的一个同步原语。它要解决的就是并发-等待的问题。
-
07 | Cond:条件变量的实现机制及避坑指南
Go标准库提供Cond原语的目的是,为等待/通知场景下的并发问题提供支持。那么今天这一讲,我们就学习下Cond这个并发原语。
-
08 | Once:一个简约而不简单的并发原语
Once可以用来执行且仅仅执行一次动作,常常用于单例对象的初始化场景。
-
09 | map:如何实现线程安全的map类型?
今天,我们就来学习下Go语言内建的map类型,了解它的基本使用方法和使用陷阱。
-
10 | Pool:性能提升大杀器
Go标准库中提供了一个通用的Pool数据结构,也就是sync.Pool,我们可以使用它创建池化的对象。
-
11 | Context:信息穿透上下文
在我们的开发场景中,上下文也是不可或缺的,缺少了上下文,我们就不能获取完整的程序信息。
-
12 | atomic:要保证原子操作,一定要使用这几种方法
在很多场景中,使用并发原语实现起来比较复杂,而原子操作可以帮助我们更轻松地实现底层的优化。
-
13 | Channel:另辟蹊径,解决并发问题
Channel是Go语言内建的first-class类型,也是Go语言和其它语言与众不同的特性之一。
-
14 | Channel:透过代码看典型的应用模式
这一讲,我将通过实际的代码,带你掌握Channel解决各种典型问题的方法。
-
15 | 内存模型:Go如何保证并发读写的顺序?
由于CPU指令重排和多级Cache的存在,保证多核访问同一个变量这件事儿变得非常复杂,所以就需要内存模型。
-
16 | Semaphore:一篇文章搞懂信号量
即使你规避了一些坑,在同时使用多种资源,而且不同的信号量控制不同资源的时候,也可能会出现死锁现象。
-
17 | SingleFlight 和 CyclicBarrier:请求合并和循环栅栏该怎么用?
这节课,我来给你介绍两个非常重要的扩展并发原语:SingleFlight和CyclicBarrier。
-
18 | 分组操作:处理一组子任务,该用什么并发原语?
共享资源保护、任务编排和消息传递是Go并发编程中常见的场景,而分组执行一批相同的或类似的任务则是任务编排中一类情形。
-
19 | 在分布式环境中,Leader选举、互斥锁和读写锁该如何实现?
在接下来的这两节课里,我要讲的是几个分布式的并发原语,它们控制的资源或编排的任务分布在不同进程、不同机器上。
-
20 | 在分布式环境中,队列、栅栏和STM该如何实现?
在分布式环境中,多节点如何并发地执行入队和出队的操作呢?
-
结束语 | 再聊Go并发编程的价值和精进之路
最后一节课,我想再给你分享一些Go并发编程的学习方法以及我的一些小心得。
课程介绍
你将获得 一个丰富完整的并发原语知识库 彻底搞懂并发原语的实现原理及使用技巧 20+大型项目的真实踩坑案例及解决方案 分布式场景中并发问题的应对策略 讲师介绍 课程介绍 但是,并发编程入门容易,想要精通却很难,主要有五大问题:...你将获得
- 一个丰富完整的并发原语知识库
- 彻底搞懂并发原语的实现原理及使用技巧
- 20+大型项目的真实踩坑案例及解决方案
- 分布式场景中并发问题的应对策略
讲师介绍
课程介绍
但是,并发编程入门容易,想要精通却很难,主要有五大问题:
- 在面对并发难题时,该选择哪个并发原语来解决问题呢?
- 如果多个并发原语都可以解决问题,那么,究竟哪个是最优解呢?比如说是用互斥锁,还是用Channel。
- 并发编程不像是传统的串行编程,程序的运行存在着很大的不确定性,我们怎么才能让相应的任务按照我们设想的流程运行呢?
- 有时候,按照正常理解的并发方式去实现的程序,结果莫名其妙就panic或者死锁了,排查起来非常困难。
- 已知的并发原语都不能解决并发问题,程序写起来异常复杂,而且代码混乱,容易出错,该怎么办呢?
鸟窝老师在多年的项目实战中,梳理了一套并发编程的知识体系,他把独立的知识点汇总到Go并发编程学习矩阵的“两大主线”之中,希望帮助你系统地掌握并发编程技能。本课程几乎涵盖了市面上可以见到的所有并发原语,而且,他会带领你深入地理解各种并发原语的实现机制,全面掌握它们的功能和使用方法。同时,还会具体讲解流行的Go开发项目中的常见错误场景及应对方案,全方位提升你的实战能力。

课程模块设计
课程分为5大模块。
- 基本并发原语:从标准库中的基本并发原语入手,详细介绍互斥锁Mutex、RWMutex、Waitgroup、Cond、Pool、Context等的实现机制和使用技巧,带你搞定并发编程中的常用类型。
- 原子操作:具体介绍标准库中的原子操作,这是其它并发原语的基础。学会了这部分内容,就可以自己创造新的并发原语。
- Channel:Channel类型是Go语言独特的类型,不仅会介绍它的基本用法,而且还会详解它的处理场景和应用模式,帮你规避陷阱。
- 扩展并发原语:目前来看,Go开发组不准备在标准库中扩充并发原语了,但是还有一些并发原语应用得非常广泛。课程会重点讲解信号量、SingleFlight、循环栅栏、ErrGroup等,让你能在处理一些并发问题时事半功倍。
- 分布式并发原语:分布式并发原语是应对大规模的应用程序中并发问题的并发类型,主要会介绍使用etcd实现的一些分布式并发原语,比如Leader选举、分布式互斥锁、分布式读写锁、分布式队列等,带你攻克分布式场景中的并发难题。
课程目录

适合人群
有一定的Go语言基础,能使用一些基本的并发原语,不适合0基础的工程师

