Go 并发编程实战课 / 鸟窝带你攻克并发编程难题

晁岳攀(鸟窝)

前微博技术专家,知名微服务框架 rpcx 作者

  • 课程目录
  • 课程介绍
  • 开篇词 | 想吃透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+大型项目的真实踩坑案例及解决方案
  • 分布式场景中并发问题的应对策略

讲师介绍

晁岳攀,网名鸟窝,前微博技术专家,知名微服务框架rpcx的作者,先后在摩托罗拉、Comcast担任开发和管理工作,著有《Scala集合技术手册》一书,并在台湾发行了繁体版。

在微博研发平台架构中心担任资深架构师期间,使用Go参与开发多个基础架构系统,并负责中国版权链,微博下一代的Redis集群系统、数据库资源云等系统的设计和开发,有大量的高并发高吞吐的服务器开发经验。

课程介绍

我们知道,Go语言部署简单,自带完善的工具链,不仅容易上手,而且执行性能非常好,现在已经被越来越多的人当成主要的编程语言。最重要的是,它天然支持并发,这也是它的最大优势。

但是,并发编程入门容易,想要精通却很难,主要有五大问题:

  1. 在面对并发难题时,该选择哪个并发原语来解决问题呢?
  2. 如果多个并发原语都可以解决问题,那么,究竟哪个是最优解呢?比如说是用互斥锁,还是用Channel。
  3. 并发编程不像是传统的串行编程,程序的运行存在着很大的不确定性,我们怎么才能让相应的任务按照我们设想的流程运行呢
  4. 有时候,按照正常理解的并发方式去实现的程序,结果莫名其妙就panic或者死锁了,排查起来非常困难
  5. 已知的并发原语都不能解决并发问题,程序写起来异常复杂,而且代码混乱,容易出错,该怎么办呢?

鸟窝老师在多年的项目实战中,梳理了一套并发编程的知识体系,他把独立的知识点汇总到Go并发编程学习矩阵的“两大主线”之中,希望帮助你系统地掌握并发编程技能。本课程几乎涵盖了市面上可以见到的所有并发原语,而且,他会带领你深入地理解各种并发原语的实现机制,全面掌握它们的功能和使用方法。同时,还会具体讲解流行的Go开发项目中的常见错误场景及应对方案,全方位提升你的实战能力。

课程模块设计

课程分为5大模块。

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

课程目录

适合人群

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

特别放送

订阅须知