Go 并发编程这么难,到底应该怎么学?| 极客时间

2020 年 10 月 13 日 InfoQ

你好,我是晁岳攀,网名鸟窝。

作为一位老程序员,我在清华同方、摩托罗拉、Comcast 等公司,一直使用 Java 做项目开发。但是后来,我毅然抛弃了十几年的 Java 编程经验,投入到了 Go 语言的怀抱,为什么呢?

一句话,我被 Go 的简单高效所打动,特别是 Go 在处理并发场景上表现出的独特性能,更是让我着迷。

我们知道,Java 语言的编码非常繁琐,为了应用设计模式而做了大量的冗长设计,而 Go 就不一样了。它提供了便利的并发编程方式,简简单单的 Go 语句,就可以创建多个 goroutine 执行并发任务。而且,Go 还提供了独特的 Channel 类型,很容易实现 goroutine 之间的数据交流。所以,Go 并发编程入门很容易,即使是初学者,要写一个使用 goroutine 异步输出 “Hello World” 的例子,也可以不费吹灰之力。

可以说,Go 并发编程的重要性不容置疑。只要是使用 Go 开发的大型应用程序,并发是必然要采用的技术。

但同时,我也了解到,很多人想要学习 Go 并发编程,却不知道该从何学起。

那么,学习 Go 并发编程,会遇到哪些困难?

  • 在面对并发难题时,感觉无从下手,不知道该用什么并发原语来解决问题,多个并发原语又不知道哪个是最优解。

  • 不知道如何编排并发任务。并发编程的程序运行存在着很大的不确定性。怎么才能让相应的任务按照你设想的流程运行呢?

  • 用并发方式实现的程序,有时候莫名其妙就 panic 或者死锁了,排查起来非常困难。

  • 已知的并发原语都不能解决并发问题,程序写起来异常复杂,而且代码混乱,容易出错。

究竟该如何高效学习 Go 并发编程呢?

学习这件事儿,最怕的就是不成体系。所以,我根据逻辑关系,拎出 2 条知识线给你,输出了这张知识地图。

首先,在知识层面,你要全面地了解各种并发编程的技术,并建立起一个丰富的并发原语库,它们就是十八般武器,可以帮助我们灵活地应对各种并发问题。

其次,在学习层面,通过 4 步法,让你掌握每种并发原语的实现机制和适用场景。

Go 中有个大方向,就是任务编排用 Channel,共享资源保护使用传统并发原语。但实际上,同一场景可能会有多个适用的并发原语,想要选出其中最合适的,就必须弄清楚每种并发原语的适用场景,千万不要被网上的一些文章误导,万事皆用 Channel。

而且,你还可以深入学习 Go 并发原语的源代码。你会发现很多独到的设计,比如 Mutex 为了公平性考量的设计、sync.Map 为提升性能做的设计,以及很多并发原语的异常状况的处理方式。尤其是这些异常状况,常常是并发编程中程序 panic 的原因。

所以,如果你能深入了解这些并发原语的实现,不但会提高你的编程能力,还能让你避免在开发中踩并发问题的坑。

最重要的是,我要带你达到可以独立创造的程度。在面对一些复杂场景时,现有的并发原语是不足已应对的,所以,你要能够创造出自己需要的并发原语。达到了这一层,那就不得了了,可以说你对 Go 并发原语的掌握已经出神入化了。

作为 Go 语言的布道者,我想将这些方法与经验系统分享给大家,因此,我与极客时间合作,推出了专栏《Go 并发编程实战课》,希望带你从广度和深度上掌握 Go 并发编程的知识点,彻底吃透并发原语的实现原理及使用技巧。同时,会为你讲解 20+ 大型项目的真实踩坑案例及解决方案,掌握分布式场景中并发问题的应对策略,完美攻克并发编程各类难题。


👆扫描上图,免费试读👆

原价 ¥68,早鸟 + 口令「Gobingfa6」

到手价 ¥49,仅限「前 200 人」有效

1 我是谁?

开始和大家提到了,我是晁岳攀,网名鸟窝。前微博技术专家,微服务框架 rpcx 的作者,先后在摩托罗拉、Comcast 担任开发和管理工作,著有《Scala 集合技术手册》一书。

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

我经常会在博客中发表一些 Go 语言相关的教学文章。曾在 2019 年的 Go 语言线下大会上分享《Go 同步和并发设计模式》,准备了 120 页的 PPT,现场观众都说干货满满,还举办了《深入 Go 并发编程》培训专场。

2 我是如何讲 Go 并发编程的?

专栏整体共分为 5 个模块,分别是基本并发原语、扩展并发原语、原子操作、Channel 和和分布式并发原语。

基本并发原语:详细讲解标准库的并发原语,包括互斥锁、读写锁等。

扩展并发原语:Go 官方提供的扩展库以及第三方提供的并发原语,包括自旋锁、文件锁等。

原子操作:原子操作是并发原语的基础。在这个模块,会具体介绍 Go 标准库提供的原子操作和扩展库,包括原子操作的实现、数据类型、提供的函数等

Channel:Go 特有的数据类型,会详细讲解容易出错的场景。

分布式并发原语:在分布式编程中常用的并发原语,比如 Leader 选举等。

课程的每一讲都是独立的,每一讲的章节也都是独立的。好处就是它们之间没有任何依赖问题,你可以调整重点去学习,然后返回来再学习其它的知识点。

详细内容,可以看看目录:


3 订阅福利

原价 ¥68,早鸟优惠 + 口令 「Gobingfa6」
到手价 ¥49, 仅限「 前 200 人 」有效

订阅后 生成海报 发给好友,
每成功邀请 1 位好友,可得 ¥18 返现。

👇扫描下图,免费试读👇


👇 点击 「阅读原文」
输入优惠口令「Gobingfa6」,
最低价 ¥4 9 入手,仅限 前 200 人
登录查看更多
1

相关内容

人们为了让计算机解决各种棘手的问题,使用编程语言 编写程序代码并通过计算机运算得到最终结果的过程。
【2020新书】C语言编程傻瓜式入门,第二版,464页pdf
专知会员服务
60+阅读 · 2020年10月15日
专知会员服务
79+阅读 · 2020年9月28日
【2020新书】高级Python编程,620页pdf
专知会员服务
232+阅读 · 2020年7月31日
【2020新书】现代C++初学者指南,301页pdf
专知会员服务
156+阅读 · 2020年7月24日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
Python导论,476页pdf,现代Python计算
专知会员服务
254+阅读 · 2020年5月17日
【经典书】数据结构与算法C++,第二版,738页pdf
专知会员服务
165+阅读 · 2020年3月27日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
C++匠心之作 从0到1 入门资料
专知
8+阅读 · 2019年11月23日
我是怎么走上推荐系统这条(不归)路的……
全球人工智能
11+阅读 · 2019年4月9日
学 Python 没找对路到底有多惨?| 码书
CSDN
3+阅读 · 2019年3月10日
如何快速入门TensorFlow ?丨极客时间
InfoQ
4+阅读 · 2019年1月8日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
零基础小白,如何入门计算机视觉?
计算机视觉life
9+阅读 · 2018年3月8日
Arxiv
0+阅读 · 2020年12月3日
Arxiv
0+阅读 · 2020年12月1日
Arxiv
0+阅读 · 2020年12月1日
Arxiv
0+阅读 · 2020年11月28日
Physical Primitive Decomposition
Arxiv
4+阅读 · 2018年9月13日
Arxiv
6+阅读 · 2018年2月8日
VIP会员
相关VIP内容
【2020新书】C语言编程傻瓜式入门,第二版,464页pdf
专知会员服务
60+阅读 · 2020年10月15日
专知会员服务
79+阅读 · 2020年9月28日
【2020新书】高级Python编程,620页pdf
专知会员服务
232+阅读 · 2020年7月31日
【2020新书】现代C++初学者指南,301页pdf
专知会员服务
156+阅读 · 2020年7月24日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
Python导论,476页pdf,现代Python计算
专知会员服务
254+阅读 · 2020年5月17日
【经典书】数据结构与算法C++,第二版,738页pdf
专知会员服务
165+阅读 · 2020年3月27日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
相关资讯
C++匠心之作 从0到1 入门资料
专知
8+阅读 · 2019年11月23日
我是怎么走上推荐系统这条(不归)路的……
全球人工智能
11+阅读 · 2019年4月9日
学 Python 没找对路到底有多惨?| 码书
CSDN
3+阅读 · 2019年3月10日
如何快速入门TensorFlow ?丨极客时间
InfoQ
4+阅读 · 2019年1月8日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
零基础小白,如何入门计算机视觉?
计算机视觉life
9+阅读 · 2018年3月8日
Top
微信扫码咨询专知VIP会员