并發和并行的區別,相信很多初出茅廬的程序員都會被問到這個問題吧,這兩個概念極容易混淆,今天,我們就來通俗地聊聊并發和并行的區別@mikechen
并發(Concurrent)當有多個線程在操作時,如果系統只有一個 CPU,則它根本不可能真正同時進行一個以上的線程,它只能把 CPU 運行時間劃分成若干個時間段,再將時間段分配給各個線程執行,在一個時間段的線程代碼運行時,其它線程處于掛起狀態.這種方式我們稱之為并發(Concurrent)。
并發,指的是多個事情,在同一段時間段內發生了,大家都在爭奪統一資源。再舉一個例子:我們可以拿網吧來舉例子。
一個網吧每天晚上六點到晚上十點的用戶量特別大,這時候可以稱之為并發量大。
假如該網吧有100個機子,但是晚上六點到晚上十點卻有150人來上網,這時候就有50人無法正常上網,要么該50人在此等待,要么就離開網吧。
網吧處理這個一百五十人的上網請求,不是在同一時刻進行的,而是在一段時間內處理的,其實,這就是并發。
并行當系統有一個以上CPU時,當一個CPU執行一個進程時,另一個CPU可以執行另一個進程,兩個進程互不搶占CPU資源,可以同時進行,這種方式我們稱之為并行(Parallel)。
我們在玩電腦的時候,計算機可以“同時”運行著音樂軟件和IDEA,我們可以邊敲代碼,邊聽音樂,計算機同時的在做多件事情。
在單核cpu的計算機中,我們似乎也能“同時”做這些事情,但這不是真正意義上的并行,其底層是由于cpu快速切換執行任務,給我們一種同時運行的錯覺而已。
但是,當計算機是多核cpu的時候,當一個CPU執行一個進程時,另一個CPU可以執行另一個進程,兩個進程互不搶占CPU資源,可以同時進行,這時候才是真正的“同時”進行,我們稱之為并行。
就好比,一個網吧,它有多臺電腦可以同時滿足多位客戶的上網需求,這就是并行,同時進行,互不爭搶。
并發和并行的區別并發是指一個處理器同時處理多個任務,并行是指多個處理器或者是多核的處理器同時處理多個不同的任務。
并發是邏輯上的同時發生,而并行是物理上的同時發生。
并行在多處理器系統中存在,而并發可以在單處理器和多處理器系統中都存在,并發能夠在單處理器系統中存在是因為并發是并行的假象,并行要求程序能夠同時執行多個操作,而并發只是要求程序假裝同時執行多個操作(每個小時間片執行一個操作,多個操作快速切換執行)。
并發和并行兩者的最大區別:一個是交替執行,一個是同時執行,一圖勝千言,如下圖所示:
以上
架構技術合集分布式架構設計從0到1全部合集(附:分布式、微服務、高并發等大型網站架構)JVM(Java虛擬機)從0到1全部合集Java多線程與并發從0到1全部合集Redis分布式緩存從0到1全部合集Spring開發框架從0到1全部合集MySQL數據庫從0到1全部合集本文發布于:2023-02-28 21:00:00,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/167771474999864.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:掛起狀態(掛起狀態的性質).doc
本文 PDF 下載地址:掛起狀態(掛起狀態的性質).pdf
| 留言與評論(共有 0 條評論) |