1. 程式人生 > >[Java 多執行緒技術](一)執行緒和程序以及並行和併發的概念

[Java 多執行緒技術](一)執行緒和程序以及並行和併發的概念

程序與執行緒

1、 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。

2、執行緒,有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。執行緒是程式中一個單一的順序控制流程。程序內一個相對獨立、可排程的執行單元,是系統獨立排程和分派CPU的基本單位,也指執行中的程式的排程單位。在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒。

● 程序和執行緒的關係
這裡寫圖片描述

● 理解
當我在電腦上開啟一個foxmail,開啟了一個程序,開啟一個瀏覽器,開啟了一個程序,當我使用foxmail的時候,收郵件是一個執行緒,發郵件是一個執行緒,寫郵件又是一個執行緒,這幾個執行緒同時為程序Foxmail工作,完成Foxmail的全部功能。
注意:圖片中的下面三個Foxmail執行緒不一定是我所說的功能,但是就是這個效果。
這裡寫圖片描述
這裡寫圖片描述

並行和併發

1、併發(concurrency):指在同一時刻只能有一條指令執行,但多個程序指令被快速的輪換執行,使得在巨集觀上具有多個程序同時執行的效果,但在微觀上並不是同時執行的,只是把時間分成若干端,使多個程序快速交替的執行。
這裡寫圖片描述

如上圖所示,併發就是隻有一個CPU資源,程式(或執行緒)之間要競爭得到執行機會。圖中的第一個階段,在A執行的過程中,B、C不會執行,因為這段時間內這個CPU資源被A競爭到了,同理,第二階段只有B在執行,第三階段只有C在執行。其實,併發過程中,A、B、C並不是同事進行的(微觀角度),但又是同時進行的(巨集觀角度)

2、並行(parallellism):指在同一時刻,有多條指令在多個處理器上同時執行
這裡寫圖片描述
如圖所示,在同一時刻,ABC都是同時執行(微觀、巨集觀)

通過多執行緒實現併發,並行:
➤ java中的Thread類定義了多執行緒,通過多執行緒可以實現併發或並行。
➤ 在CPU比較繁忙,資源不足的時候(開啟了很多程序),作業系統只為一個含有多執行緒的程序分配僅有的CPU資源,這些執行緒就會為自己儘量多搶時間片,這就是通過多執行緒實現併發,執行緒之間會競爭CPU資源爭取執行機會。
➤ 在CPU資源比較充足的時候,一個程序內的多執行緒,可以被分配到不同的CPU資源,這就是通過多執行緒實現並行。
➤ 至於多執行緒實現的是併發還是並行?上面所說,所寫多執行緒可能被分配到一個CPU核心中執行,也可能被分配到不同CPU執行,分配過程是作業系統所為,不可人為控制。所以,如果有人問我我所寫的多執行緒是併發還是並行的?我會說,都有可能。
➤ 不管併發還是並行,都提高了程式對CPU資源的利用率,最大限度地利用CPU資源