程序的並行和並發
程序的並發(Concurrent)
- 在操作系統中,是指一個時間段中有幾個程序都處於己啟動運行到運行完畢之間,且這幾個程序都是在同一個處理器_上運行。
- 並發不是真正意義上的“同時進行”,只是CPU把一個時間段划分成幾個時間片段(時間區間),然后在這幾個時間區間之間來回切換,由於CPU處理的速度非常快,只要時間間隔處理得當,即可讓用戶感覺是多個應用程序同時在進行。
程序的並行(Parallel)
- 當系統有一個以上CPU時,當一個CPU執行一個進程時,另一個CPU可以執行另一個進程,兩個進程互不搶占CPU資源,可以同時進行,我們稱之為並行(Parallel)。
- 其實決定並行的因素不是CPU的數量,而是CPU的核心數量,比如一個CPU多個核也可以 並行。
- 適合科學計算,后台處理等弱交互場景
二者對比
- 並發,指的是多個事情,在同一時間段內同時發生了。
- 並行,指的是多個事情,在同一時間點上同時發生了。
- 並發的多個任務之間是互相搶占資源的。
- 並行的多個任務之間是不互相搶占資源的。
- 只有在多CPU或者一個CPU多核的情況中,才會發生並行。否則,看似同時發生的事情,其實都是並發執行的。
垃圾回收的並發與並行
並發和並行,在談論垃圾收集器的上下文語境中,它們可以解釋如下:
-
並行(Parallel) :指多條垃圾收集線程並行工作,但此時用戶線程仍處於等待狀態。
- 如ParNew、 Parallel Scavenge、 Parallel 0ld;
-
串行(Serial)
- 相較於並行的概念,單線程執行。
- 如果內存不夠,則程序暫停,啟動JVM垃圾回收器進行垃圾回收。回收完,再啟動程序的線程。

- 並發(Concurrent) :指用戶線程與垃圾收集線程同時執行(但不一定是並行的,可能會交替執行),垃圾回收線程在執行時不會停頓用戶程序的運行。
- ➢用戶程序在繼續運行,而垃圾收集程序線程運行於另一個CPU上;
- ➢如: CMS、G1
