并发是一个有趣的词,因为它对编程领域中的不同人员意味着不同的事情。除了"并发"之外,你可能听说过"异步","并行"或"线程化"等字眼。有些人认为这些词意思相同,而其他人则非常特别地在每个词之间划定界限。既然我们整本书都会讨论并发,那么首先花一些时间讨论我们说"并发"时指代的含义是非常重要的。
我们将在第2章花费一些时间讨论并发原理,但现在让我们采用一个实际的定义,作为我们理解的基础。
当大多数人使用“并发”这个词时,他们通常指的是与一个或多个进程同时发生的进程。 通常也暗示所有这些进程都在同一时间取得进展。 在这个定义下,一个简单的方法来思考这个问题是——人。 你正在阅读这篇文章,而世界上的其他人则同时过着自己的生活。 它们与你同时存在。
并发是计算机科学中的一个广泛话题,从这个定义中可以得出各种各样的主题:理论,并发建模方法,逻辑正确性,实际问题甚至理论物理。 我们将在本书中涉及一些辅助话题,但我们主要将坚持涉及Go内容中涉及并发的部分,具体为:Go如何选择对并发进行建模,由此产生哪些问题和模型,以及我们如何在这个模型中构造原语来解决这些问题。
在本章中,我们将详细介绍并发在计算机科学中占有重要地位的原因,为什么并发操作很困难并且值得仔细研究,最重要的是,尽管存在这些挑战,Go可以使 通过使用它的并发原语使程序更加清晰和快速。
与大多数理解问题的方式一样,我们将从一些历史开始,解读并发操作是如何成为一个重要话题的。
* * * * *
学识浅薄,错误在所难免。我是长风,欢迎来Golang中国的群(211938256)就本书提出修改意见。
- 前序
- 谁适合读这本书
- 章节导读
- 在线资源
- 第一章 并发编程介绍
- 摩尔定律,可伸缩网络和我们所处的困境
- 为什么并发编程如此困难
- 数据竞争
- 原子性
- 内存访问同步
- 死锁,活锁和锁的饥饿问题
- 死锁
- 活锁
- 饥饿
- 并发安全性
- 优雅的面对复杂性
- 第二章 代码建模:序列化交互处理
- 并发与并行
- 什么是CSP
- CSP在Go中的衍生物
- Go的并发哲学
- 第三章 Go的并发构建模块
- Goroutines
- sync包
- WaitGroup
- Mutex和RWMutex
- Cond
- Once
- Pool
- Channels
- select语句
- GOMAXPROCS
- 结论
- 第四章 Go的并发编程范式
- 访问范围约束
- fo-select循环
- 防止Goroutine泄漏
- or-channel
- 错误处理
- 管道
- 构建管道的最佳实践
- 便利的生成器
- 扇入扇出
- or-done-channel
- tee-channel
- bridge-channel
- 队列
- context包
- 小结
- 第五章 可伸缩并发设计
- 错误传递
- 超时和取消
- 心跳
- 请求并发复制处理
- 速率限制
- Goroutines异常行为修复
- 本章小结
- 第六章 Goroutines和Go运行时
- 任务调度