博客 / 詳情

返回

《Grokking Concurrency》讀後感

一、 為什麼讀這本書?

1.在工作項目中,有些項目用多線程(如:threading.Thread) , 有些項目用(如:multiprocess.pool), 也有些項目用到協程(如:asyncio)。但是什麼時候用哪種技術,自己還不是很瞭解,從而就無法判斷這樣用到底好不好,所以想找本書看看,從而梳理清楚。

2.曾經有一個 Python 項目,雖然用了多進程,但是還是出現了請求處理不過來的情況,雖然該項目在後續選擇了 Java 技術棧解決了,但這個問題我卻始終無法忘記,所以平時留意併發相關的書,看是否能找到解決方案。

因為《Grokking Concurrency》的示例代碼使用 Python 語言實現,同時是 2024 年出版的,書中代碼不至於無法運行,所以選擇閲讀該書來了解併發編程。

二、這本書寫了什麼?

本書主要分為兩部分,第一部分介紹了併發的基礎:程序,進程,線程,協程;第二部分介紹了併發編程中常遇到的問題:競態條件,死鎖,飢餓等。

本書 304 頁,從 2025 年 11 月 10 日至 2025 年 12 月 16 日,期間斷斷續續花了 23 天閲讀完《Grokking Concurrency》。

三、這本書特點

1.重點講明白了為什麼(why)。

這是這本書最大的特點,這本書不是在羅列概念,而是從計算機硬件逐漸展開描述,引入相關的概念。邏輯非常強,讀完之後就明白了這個某個概念是什麼?為什麼要引入這個概念。如我自己平時就很不理解“線程”和“協程”這兩個概念,看完之後如醍醐灌頂——要理解線程,要先理解程序的執行原理(program>instruction);而要理解協程則要先理解線程切換需要消耗資源。

2.很多無意義的比喻和插圖。

雖然作者想表達:From symphony orchestras to hospital waiting rooms, and from fast food processes to home maintenance, we’ve drawn comparisons to help you understand complex topics(從交響樂團到醫院候診室,從快餐加工到家庭維修,我們通過類比來幫助理解複雜的主題)。説實話,與其做類比,不如拿實際項目舉例。

再者,書中有很多插圖,這大概也是該書中文版譯名《併發編程圖解》 的來源吧。不過,很多圖無意義,不是畫個圖然後配些文字就叫“圖解”啊。很多時候之所以需要“圖”,是因為內容過於抽象,而我們受限於想象力,所以才需要圖來幫助理解。話説回來,其實中譯版取這個名字也不好,應該叫《深入理解併發編程》。如下面的圖就沒有什麼意義:

3.缺乏實戰項目

個人覺得作者確實寫得很好,如果能補充一些 syncio 和 aiohttp 在實際項目中的應用就完美了。

四、這本書適合什麼樣的人?

回到“為什麼閲讀這本書”。我的第一個問題得到了回答:CPU密集型任務使用多進程,IO密集型使用多線程(阻塞IO)或者協程(非阻塞IO)。但第二個問題本書沒有涉及。

本書是一本基礎的併發入門書,使用 Python 實現代碼。適合想了解併發的 Python 開發者。

五、閲讀指數

按照 5 星標準,本書閲讀指數 4 顆星(★★★★☆)。

六、參考資料

1. 編程

(1)豆瓣,Kirill Bobrov,《Grokking Concurrency》: https://book.douban.com/subject/36296797/

(2)豆瓣,基里爾·波波洛夫,《併發編程圖解》:https://book.douban.com/subject/37364991/

(3)Github,源碼: https://github.com/luminousmen/grokking_concurrency

2. 英語

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

歡迎搜索及關注:編程人(a_codists)

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.