Go 并发编程实战课
鸟窝带你攻克 Go 并发编程难题
晁岳攀(鸟窝)  前微博技术专家,知名微服务框架 rpcx 作者
专栏
已完结·共 22 讲
|
2.6w 人已学
|
收藏
CAS 指令将给定的值和一个内存地址中的值进行比较,如果它们是同一个值,就使用新值替换内存地址中的值,这个操作是原子性的。那啥是原子性呢?如果你还不太理解这个概念,那么在这里只需要明确一点就行了,那就是原子性保证这个指令总是基于最新的值进行计算,如果同时有其它线程已经修改了这个值,那么,CAS 会返回失败。
来自:02 | Mutex:庖丁解牛看实现
16 人划过
共享资源。并发地读写共享资源,会出现数据竞争(data race)的问题,所以需要 Mutex、RWMutex 这样的并发原语来保护。
来自:01 | Mutex:如何解决资源并发访问问题?
8 人划过
sync.Pool 不可在使用之后再复制使用。
来自:10 | Pool:性能提升大杀器
7 人划过
记住,不是只有你想中途放弃,才去调用 cancel,只要你的任务正常完成了,就需要调用 cancel,这样,这个 Context 才能释放它的资源(通知它的 children 处理 cancel,从它的 parent 中把自己移除,甚至释放相关的 goroutine)。
来自:11 | Context:信息穿透上下文
5 人划过
map 对象必须在使用之前初始化
来自:09 | map:如何实现线程安全的map类型?
4 人划过
用 SingleFlight 来解决缓存击穿问题再合适不过了。因为,这个时候,只要这些对同一个 key 的并发请求的其中一个到数据库中查询,就可以了,这些并发的请求可以共享同一个结果。因为是缓存查询,不用考虑幂等性问题
来自:17 | SingleFlight 和 CyclicBarrier:请求合并和循环栅栏该怎么用?
4 人划过
因为对 64 位整数的原子操作要求整数的地址是 64 位对齐的,所以针对 64 位和 32 位环境的 state 字段的组成是不一样的。
来自:06 | WaitGroup:协同等待,任务编排利器
4 人划过
锁是性能下降的“罪魁祸首”之一,所以,有效地降低锁的竞争,就能够很好地提高性能。因此,监控关键互斥锁上等待的 goroutine 的数量,是我们分析锁竞争的激烈程度的一个重要指标
来自:04| Mutex:骇客编程,如何拓展额外功能?
3 人划过
。如果在实际应用中,你想等所有的 Worker 都执行完,就可以获取最大计数值的信号量。
来自:16 | Semaphore:一篇文章搞懂信号量
3 人划过
Go 中有一个大的方向,就是任务编排用 Channel,共享资源保护用传统并发原语
来自:开篇词 | 想吃透Go并发编程,你得这样学!
3 人划过
*精彩内容为该课程各文章中划线次数最多的内容
免费试读
讲师

晁岳攀(鸟窝)

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

晁岳攀,网名鸟窝,前微博技术专家,知名微服务框架 rpcx 的作者,先后在摩托罗拉、Comcast 担任开发和管理工作,著有《Scala 集合技术手册》一书,并在台湾发行了繁体版。 在微博研发平台架构中心担任资深架构师期间,使用 Go 参与开发多个基础架构系统,并负责中国版权链,微博...查看更多
编辑推荐
包含这门课的学习路径

Go工程师

16门课程 89.9w人学习
看过的人还看了
MySQL 实战 45 讲
林晓斌
网名丁奇,前腾讯云数据库负责人

49讲 | 224934 人已学习

¥68¥199
数据结构与算法之美
王争
前 Google 工程师

81讲 | 283802 人已学习

¥68¥199
左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家

119讲 | 180999 人已学习

¥98¥399
Redis 核心技术与实战
蒋德钧
中科院计算所副研究员

53讲 | 81740 人已学习

¥68¥199
深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者

57讲 | 116761 人已学习

¥68¥199
Go 语言核心 36 讲
郝林
《Go 并发编程实战》作者,前轻松筹大数据负责人

55讲 | 79629 人已学习

¥59¥129