喫個快餐都能學到串行、並行、併發

Java 多線程系列文章第 3 篇

這篇文章繼續來嘮嘮概念,講這三兄弟:串行(Serial)並行(Parallel)併發(Concurrent)

喫快餐

出門在外喫飯是一件頭疼的事,用我大學舍友一句話形容:如果不是沒喫飯不能活,他是不會喫飯的。不管學生還是工作者,喫飯都是一件需要揪心的事,有食堂的企業員工糾結要在公司食堂喫飯還是在外面喫飯,沒食堂的企業員工則糾結是吃麪還是喫米飯。每到飯點,和同事去喫飯都會問一句廢話:喫啥?然後相視而笑,繼續喫快餐。。。

咱喫快餐也能學點知識,我來給大家一一道來。快餐有一個很明顯的特點就是:排隊!!! 目前我見過的有下面幾種排隊方式,剛好和咱們今天要講的串行併發並行一一對應。

現在我們公司附近的快餐,人少的時候,就是排一條隊,如下圖所示,每個人按順序排,一直往前走,如果看到想喫的菜,就用手指一指,快餐員工就會給你打菜,這個應該是很多快餐店都採用的方式,容易管理,但是有一點需要強調的就是如果一個同學只想喫米飯和豆芽,他還是需要排一整隊到最後的結賬臺結賬。這其實就是咱們計算機世界裏面的串行,一條隊伍,依次有序的執行着。
串行
不過一到 12 點高峯期上面那種排隊方式就撐不住了,分分鐘排隊排到外面曬太陽,這時爲了提高效率,因爲快餐店還有一片空地,所以又加了一套打菜裝備和員工,這時很好的解決了一條隊伍太長的問題,這時就是並行了,2 套打菜裝備和員工各自互不干涉,完全獨立,每套裝備能夠解決每個顧客的點菜需求。當然這要求比較高,需要餐廳有足夠的空間可以放下兩套裝備,並且需要僱傭多一倍的員工來爲顧客打菜,這裏就類似計算機的雙核。
並行
除了上面的兩種快餐排隊方式,還見過下面這種的,只有一套打菜裝備,但是卻有很多個隊,每個菜排一條隊(現實中其實不止一個菜,而是多個菜,這裏畫圖就簡化成一個菜),每個人就只需要排自己想喫的菜的隊伍,這一道道菜就像計算機的各個資源,比如 CPU、IO 等等,人就像一個一個進程,有些只需要 CPU 計算資源,有些還要 IO 資源,各取所需,這種方式就是併發。這種打菜方式和上面第一種所需要的資源是一樣的:一套打菜裝備和員工。每個顧客最終都需要走到結賬這個步驟,而結賬只有一個,也就是類似計算機的單核。
併發

總結

那麼迴歸到計算機世界,這三者是什麼東西呢?早期計算機只有一個 CPU,也就是所謂的單核計算機,只有一個 CPU 去執行任務,所以只能是一個任務一個任務的跑,每個任務跑完才讓下一個任務跑,也就是串行的,後面因爲進程和線程概念的提出與實現,它們使得任務以進程的方式運行,拆分成多個時間片運行,而不是一次運行執行完任務,這樣子在一個 CPU 運行中可以有多個任務在併發執行,這時還是隻有一個 CPU,一個時間點只有一個任務在執行,而並行是因爲 CPU 硬件的發展,出現多核 CPU,所以實現了真正的同一時間點能有多個任務在執行。

上面用快餐排隊現象給大家解釋了串行並行併發這三個概念,大家理解了麼?如果不理解可能是我講得不夠透徹,可以留言跟我提一提建議;如果理解了,可否幫忙轉發一下,多謝啦!

推薦閱讀

泡一杯茶,學一學同異步

進程知多少?

設計模式看了又忘,忘了又看?

公衆號後臺回覆『設計模式』可以獲取《一故事一設計模式》電子書

覺得文章有用幫忙轉發&點贊,多謝朋友們!

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