執行緒與行程相似,但執行緒是一個比行程更小的執行單位,一個行程在其執行的程序中可以產生多個執行緒,與行程不同的是同類的多個執行緒共享同一塊記憶體空間和一組系統資源,所以系統在產生一個執行緒,或是在各個執行緒之間作切換作業時,負擔要比行程小得多,也正因為如此,執行緒也被稱為輕量級行程,
執行緒特點:
? 輕量級行程
? 獨立調度的基本單位
? 可并發執行
? 共享行程資源程式是含有指令和資料的檔案,被存盤在磁盤或其他的資料存盤設備中,也就是說程式是靜態的代碼,它是應用程式執行的藍本,
行程是程式的一次執行程序,是系統運行程式的基本單位,因此行程是動態的,系統運行一個程式即是一個行程從創建,運行到消亡的程序,簡單來說,一個行程就是一個執行中的程式,它在計算機中一個指令接著一個指令地執行著,同時,每個行程還占有某些系統資源如CPU時間,記憶體空間,檔案,輸入輸出設備的使用權等等,換句話說,當程式在執行時,將會被作業系統載入記憶體中,執行緒 是行程劃分成的更小的運行單位,執行緒和行程最大的不同在于基本上各行程是獨立的,而各執行緒則不一定,因為同一行程中的執行緒極有可能會相互影響,從另一角度來說,行程屬于作業系統的范疇,主要是同一段時間內,可以同時執行一個以上的程式,而執行緒則是在同一程式內幾乎同時執行一個以上的程式段,
行程特點:
? 動態性
? 并發性
? 獨立性并發(Concurrent)和并行(Parallel)的區別
- 解釋一:并行是指兩個或者多個事件在同一時刻發生;而并發是指兩個或多個事件在同一時間間隔發生,
- 解釋二:并行是在不同物體上的多個事件,并發是在同一物體上的多個事件,
- 解釋三:并行是在多臺處理器上同時處理多個任務,如 hadoop 分布式集群,并發是在一臺處理器上“同時”處理多個任務,
并行(parallel):指在同一時刻,有多條指令在多個處理器上同時執行,所以無論從微觀還是從宏觀來看,二者都是一起執行的,
并發(concurrency):指在同一時刻只能有一條指令執行,但多個行程指令被快速的輪換執行,使得在宏觀上具有多個行程同時執行的效果,但在微觀上并不是同時執行的,只是把時間分成若干段,使多個行程快速交替的執行, 總結:并行在多處理器系統中存在,而并發可以在單處理器和多處理器系統中都存在,并發能夠在單處理器系統中存在是因為并發是并行的假象,并行要求程式能夠同時執行多個操作,而并發只是要求程式假裝同時執行多個操作(每個小時間片執行一個操作,多個操作快速切換執行),
當有多個執行緒在操作時,如果系統只有一個 CPU,則它根本不可能真正同時進行一個以上的執行緒,它只能把 CPU 運行時間劃分成若干個時間段,再將時間段分配給各個執行緒執行,在一個時間段的執行緒代碼運行時,其它執行緒處于掛起狀態.這種方式我們稱之為并發(Concurrent),
當系統有一個以上 CPU 時,則執行緒的操作有可能非并發,當一個 CPU 執行一個執行緒時,另一個 CPU 可以執行另一個執行緒,兩個執行緒互不搶占 CPU 資源,可以同時進行,這種方式我們稱之為并行(Parallel),
參考:簡書執行緒和行程的區別

行程間通信
行程間通信(IPC,InterProcess Communication)是指在不同行程之間傳播或交換資訊.
IPC的方式通常有管道(包括無名管道和命名管道)、訊息佇列、信號量、共享存盤、socket、Streams等,其中 Socket和Streams支持不同主機上的兩個行程IPC,
一、管道
管道,通常指無名管道,是 UNIX 系統IPC最古老的形式,
1、特點:
-
它是半雙工的(即資料只能在一個方向上流動),具有固定的讀端和寫端,
-
它只能用于具有親緣關系的行程之間的通信(也是父子行程或者兄弟行程之間),
-
它可以看成是一種特殊的檔案,對于它的讀寫也可以使用普通的read、write 等函式,但是它不是普通的檔案,并不屬于其他任何檔案系統,并且只存在于記憶體中,
二、FIFO
FIFO,也稱為命名管道,它是一種檔案型別,
1、特點
-
FIFO可以在無關的行程之間交換資料,與無名管道不同,
-
FIFO有路徑名與之相關聯,它以一種特殊設備檔案形式存在于檔案系統中,
三、訊息佇列
訊息佇列,是訊息的鏈接表,存放在內核中,一個訊息佇列由一個識別符號(即佇列ID)來標識,
1、特點
-
訊息佇列是面向記錄的,其中的訊息具有特定的格式以及特定的優先級,
-
訊息佇列獨立于發送與接收行程,行程終止時,訊息佇列及其內容并不會被洗掉,
-
訊息佇列可以實作訊息的隨機查詢,訊息不一定要以先進先出的次序讀取,也可以按訊息的型別讀取,
四、信號量
信號量(semaphore)與已經介紹過的 IPC 結構不同,它是一個計數器,信號量用于實作行程間的互斥與同步,而不是用于存盤行程間通信資料,
1、特點
-
信號量用于行程間同步,若要在行程間傳遞資料需要結合共享記憶體,
-
信號量基于作業系統的 PV 操作,程式對信號量的操作都是原子操作,
-
每次對信號量的 PV 操作不僅限于對信號量值加 1 或減 1,而且可以加減任意正整數,
-
支持信號量組,
五、共享記憶體
共享記憶體(Shared Memory),指兩個或多個行程共享一個給定的存盤區,
1、特點
-
共享記憶體是最快的一種 IPC,因為行程是直接對記憶體進行存取,
-
因為多個行程可以同時操作,所以需要進行同步,
-
信號量+共享記憶體通常結合在一起使用,信號量用來同步對共享記憶體的訪問,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151059.html
標籤:Java
上一篇:為什么Java只有值傳遞
下一篇:final關鍵字
