java架構-執行緒和程式的區別

陌霖Java架構發表於2018-11-11

1、程式是什麼

程式(process)是具有一定獨立功能的程式,作業系統利用程式把工作劃分為一些功能單元。 程式是進行資源分配和排程的一個獨立單位。它還擁有一個私有的虛擬地址空間,該空間僅能被它所包含的執行緒訪問。 一個應用程式(application)是由一個或多個相互協作的程式組成的。例如,Visual Studio開發環境就是利用一個程式編輯原始檔,並利用另一個程式完成編譯工作的應用程式。

2、執行緒是什麼

執行緒(thread)是程式中所包含的一個或多個執行單元。它只能歸屬於一個程式並且只能訪問該程式所擁有的資源。 它程式中執行運算的最小單位,是程式中的一個實體,是被程式獨立排程和分派的基本單位。 執行緒自己不擁有系統資源,只擁有一點在執行中必不可少的資源(計數器、暫存器和棧),但它可與同屬一個程式的其它執行緒共享程式所擁有的全部資源。一個執行緒可以建立和撤消另一個執行緒,同一程式中的多個執行緒之間可以併發執行。 當作業系統建立一個程式後,該程式會自動申請一個名為主執行緒(首要執行緒)的執行緒。主執行緒將執行執行時宿主,而執行時宿主會負責載入CLR(公共語言執行庫)。

3、執行緒和程式有什麼關係以及區別?

首先,程式和程式如同列車和車廂,沒有可比性,但是他們有一定的相關性:

1.一個執行緒只能屬於一個程式,而一個程式可以有多個執行緒,但至少有一個執行緒。 2.資源分配給程式,同一程式的所有執行緒共享該程式的所有資源。 3.虛擬機器分給執行緒,即真正在虛擬機器上執行的是執行緒。 4.執行緒在執行過程中,需要協作同步。不同程式的執行緒間要利用訊息通訊的辦法實現同步。

如果非要比較程式與執行緒的區別,可以從以下幾個方面來看:
複製程式碼
  • 排程
執行緒作為排程和分配的基本單位,程式作為擁有資源的基本單位
複製程式碼
  • 併發性
不僅程式之間可以併發執行,同一個程式的多個執行緒之間也可併發執行
複製程式碼
  • 擁有資源
程式是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程式的資源.
複製程式碼
  • 系統開銷
在建立或撤消程式時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。
複製程式碼

相關文章