做並發編程之前,必須首先理解什么是並發,什么是並行,什么是並發編程,什么是並行編程。
並發(concurrency)和並行(parallellism)是:
- 解釋一:並行是指兩個或者多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔發生。
- 解釋二:並行是在不同實體上的多個事件,並發是在同一實體上的多個事件。
- 解釋三:在一台處理器上“同時”處理多個任務,在多台處理器上同時處理多個任務。如hadoop分布式集群
所以並發編程的目標是充分的利用處理器的每一個核,以達到最高的處理性能
並發(Concurrent),
在操作系統中,是指一個時間段中有幾個程序都處於已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行。
就想前面提到的操作系統的時間片分時調度。打游戲和聽音樂兩件事情在同一個時間段內都是在同一台電腦上完成了從開始到結束的動作。那么,就可以說聽音樂和打游戲是並發的。
並行
並行(Parallel),當系統有一個以上CPU時,當一個CPU執行一個進程時,另一個CPU可以執行另一個進程,兩個進程互不搶占CPU資源,可以同時進行,這種方式我們稱之為並行(Parallel)。
這里面有一個很重要的點,那就是系統要有多個CPU才會出現並行。在有多個CPU的情況下,才會出現真正意義上的『同時進行』。
並發與並行
我們兩個人在吃午飯。你在吃飯的整個過程中,吃了米飯、吃了蔬菜、吃了牛肉。吃米飯、吃蔬菜、吃牛肉這三件事其實就是並發執行的。
對於你來說,整個過程中看似是同時完成的的。但其實你是在吃不同的東西之間來回切換的。
還是我們兩個人吃午飯。在吃飯過程中,你吃了米飯、蔬菜、牛肉。我也吃了米飯、蔬菜和牛肉。
我們兩個人之間的吃飯就是並行的。兩個人之間可以在同一時間點一起吃牛肉,或者一個吃牛肉,一個吃蔬菜。之間是互不影響的。
所以,並發是指在一段時間內宏觀上多個程序同時運行。並行指的是同一個時刻,多個任務確實真的在同時運行。
並發和並行的區別
並發,指的是多個事情,在同一時間段內同時發生了。
並行,指的是多個事情,在同一時間點上同時發生了。
並發的多個任務之間是互相搶占資源的。
並行的多個任務之間是不互相搶占資源的、
只有在多CPU的情況中,才會發生並行。否則,看似同時發生的事情,其實都是並發執行的。