并發是一個有趣的詞,因為它對編程領域中的不同人員意味著不同的事情。除了"并發"之外,你可能聽說過"異步","并行"或"線程化"等字眼。有些人認為這些詞意思相同,而其他人則非常特別地在每個詞之間劃定界限。既然我們整本書都會討論并發,那么首先花一些時間討論我們說"并發"時指代的含義是非常重要的。
我們將在第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運行時
- 任務調度