Java 多線程系列文章第 3 篇 這篇文章繼續來嘮嘮概念,講這三兄弟: 串列(Serial) 、 並行(Parallel) 、 併發(Concurrent) 。 吃快餐 出門在外吃飯是一件頭疼的事,用我大學舍友一句話形容:如果不是沒吃飯不能活,他是不會吃飯的。不管學生還是工作者,吃飯都是一件需要揪 ...
Java 多線程系列文章第 3 篇
這篇文章繼續來嘮嘮概念,講這三兄弟:串列(Serial)、並行(Parallel)、併發(Concurrent)。
吃快餐
出門在外吃飯是一件頭疼的事,用我大學舍友一句話形容:如果不是沒吃飯不能活,他是不會吃飯的。不管學生還是工作者,吃飯都是一件需要揪心的事,有食堂的企業員工糾結要在公司食堂吃飯還是在外面吃飯,沒食堂的企業員工則糾結是吃面還是吃米飯。每到飯點,和同事去吃飯都會問一句廢話:吃啥?然後相視而笑,繼續吃快餐。。。
咱吃快餐也能學點知識,我來給大家一一道來。快餐有一個很明顯的特點就是:排隊!!! 目前我見過的有下麵幾種排隊方式,剛好和咱們今天要講的串列、併發、並行一一對應。
現在我們公司附近的快餐,人少的時候,就是排一條隊,如下圖所示,每個人按順序排,一直往前走,如果看到想吃的菜,就用手指一指,快餐員工就會給你打菜,這個應該是很多快餐店都採用的方式,容易管理,但是有一點需要強調的就是如果一個同學只想吃米飯和豆芽,他還是需要排一整隊到最後的結賬台結賬。這其實就是咱們電腦世界裡面的串列,一條隊伍,依次有序的執行著。
不過一到 12 點高峰期上面那種排隊方式就撐不住了,分分鐘排隊排到外面曬太陽,這時為了提高效率,因為快餐店還有一片空地,所以又加了一套打菜裝備和員工,這時很好的解決了一條隊伍太長的問題,這時就是並行了,2 套打菜裝備和員工各自互不幹涉,完全獨立,每套裝備能夠解決每個顧客的點菜需求。當然這要求比較高,需要餐廳有足夠的空間可以放下兩套裝備,並且需要雇佣多一倍的員工來為顧客打菜,這裡就類似電腦的雙核。
除了上面的兩種快餐排隊方式,還見過下麵這種的,只有一套打菜裝備,但是卻有很多個隊,每個菜排一條隊(現實中其實不止一個菜,而是多個菜,這裡畫圖就簡化成一個菜),每個人就只需要排自己想吃的菜的隊伍,這一道道菜就像電腦的各個資源,比如 CPU、IO 等等,人就像一個一個進程,有些只需要 CPU 計算資源,有些還要 IO 資源,各取所需,這種方式就是併發。這種打菜方式和上面第一種所需要的資源是一樣的:一套打菜裝備和員工。每個顧客最終都需要走到結賬這個步驟,而結賬只有一個,也就是類似電腦的單核。
總結
那麼回歸到電腦世界,這三者是什麼東西呢?早期電腦只有一個 CPU,也就是所謂的單核電腦,只有一個 CPU 去執行任務,所以只能是一個任務一個任務的跑,每個任務跑完才讓下一個任務跑,也就是串列的,後面因為進程和線程概念的提出與實現,它們使得任務以進程的方式運行,拆分成多個時間片運行,而不是一次運行執行完任務,這樣子在一個 CPU 運行中可以有多個任務在併發執行,這時還是只有一個 CPU,一個時間點只有一個任務在執行,而並行是因為 CPU 硬體的發展,出現多核 CPU,所以實現了真正的同一時間點能有多個任務在執行。
上面用快餐排隊現象給大家解釋了串列、並行、併發這三個概念,大家理解了麽?如果不理解可能是我講得不夠透徹,可以留言跟我提一提建議;如果理解了,可否幫忙轉發一下,多謝啦!
推薦閱讀
後臺回覆『設計模式』可以獲取《一故事一設計模式》電子書
覺得文章有用幫忙轉發&點贊,多謝朋友們!