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