併發、並行和同步的概念解釋與故事理解

前言

近期發現部分同學對併發、並行和同步三個概念的理解有混淆,所以做一下簡單的名詞解釋,並用一個(寫的很爛)的故事來幫助大家理解 :)

名詞解釋

  1. 併發Concurrency):併發是一種機制,即指“同時有多個請求被髮起,或另一種意義上說支持同時有多個線程存在”;支持併發即是要能夠包容同時來到的多個請求,或說包容同時存在的多個線程
    • 處理這多個請求的方式可以是並行的,這樣就要求硬件需要有多個計算核心
    • 也可以是隻有一個計算資源,處理完一個請求再處理第二個 / 在不同請求間不停切換運行,意味着同時可以有許多線程存在,但每一時刻正在跑的線程只有一個
  2. 並行Parallelism):並行是一種處理方式(或可以說是一種架構方式),即指“有多個計算核心,可以在同一時間同時處理多個任務 / 把一個任務分割成小塊,在同一時間同時處理多個部分”
  3. 同步Synchronization):同步是一種要求,即指“在支持併發的情況下,不同請求之間(線程之間)不能發生數據衝突或資源搶佔衝突”
    • 要做好同步,往往需要保證對某個資源的操作是原子性 (Atomic)的
    • 有時,同步也指“通過某些機制來限制同時存在的多個線程的執行順序”這一要求

故事

有位女孩名叫 CPU ,很多男孩子都喜歡她。

有一天,男孩 Request-A 來邀請女孩約會,女孩答應了。正當他們進展順利之時,另一個男孩 Request-B 又找到女孩,請求與她約會。女孩一時尷尬,面對兩個男孩子不知道怎麼辦纔好,只能驚慌失措逃回家裏。體驗了這次不愉快的約會經歷後,女孩去看了心理醫生,心理醫生爲她寫下診斷報告:“不支持併發Concurrency),同時面對兩個約會請求就會panic。”

心理醫生爲她重新疏導了面對這種尷尬的應對方式。不久後,男孩 Request-C 來邀請女孩約會,女孩欣然答應了。不巧,男孩 Request-D 在這時候又來找她。女孩這次並不害怕了,她也同意了D的請求,可是,自己只有一個人,沒法同時和兩個男孩約會呀?她只好讓 D 等等,先與 C 約會一會,再開始和 D 的約會,進行了一會之後再返回 C 身邊,如此往復。女孩對這樣的進步非常滿意,在日記裏寫下:“終於支持了併發,真開心,只可惜還不能並行Parallelism)呀。”

女孩以這樣的方式生活了一段時間,直到她的生日前夜,她遇到了一個重大的問題。男孩 Request-E 和 Request-F 同時來找女孩約會,女孩如往常一樣在他倆之間切換來去。時間到達她生日的當天零點, E 和 F 都計劃着在這一時刻在女孩的記事本上寫下深情告白,不幸的是,兩個人互相爭搶,都想先寫下告白,一番拉扯之後,記事本只剩下一堆雜亂的廢紙。男孩 E 和 F 對女孩記事本的脆弱表現得很不高興,紛紛指責女孩道:“你支持了併發,怎麼沒有做好同步Synchronization)!”

女孩非常生氣和懊悔,於是她思來想去,想到了一個好辦法。她爲自己的記事本配了一支 Mutex-Lock 牌的特殊的筆,只有拿着這一支筆才能在這本記事本上寫下東西。第二年的生日很快到了,前來寫下告白的男孩們不得不排好隊,等待前一個人用這隻筆寫完,將筆傳給自己,才能寫下自己的告白。女孩終於通過鎖實現了同步。

就這樣又過了很久,來邀請女孩約會的男孩子們越來越多,女孩漸漸對頻繁奔波的約會方式感到勞累,她覺得這樣下去效率實在太低了。正值科技蓬勃發展,她決定,花費重金,克隆三個新的自己。從此之後,女孩總能同一時刻應付四個男孩子的約會,而不用來回奔波,約會的效率真的大大提高了。

只可惜的是,她還是隻有一本記事本。又一年生日,來寫告白的男孩子排成了長龍。她的四個分身卻無所事事,不得不等待寫告白的男生一個一個的寫完,以繼續約會。分身們覺得不妥,相互一討論,得出結論:“我們遇到了瓶頸Bottleneck)啦。”

吸取了這次的教訓,女孩的每個分身都各自買了一本記事本,只要在每次生日夜結束之後,請一個分身將四本記事本上的告白信息彙總起來,寫在一本本子上就可以了。

經歷了這麼多風風雨雨,女孩看到科技的發展將爲她帶來越來越多的新技術,讓她約會的效率得到驚人的提高,她覺得未來充滿了希望。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章