1. 程式人生 > >程式、程序和執行緒之間的聯絡和區別

程式、程序和執行緒之間的聯絡和區別

定義:

  一 程式只是一組指令的有序集合。

  二 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,是系統進行資源分配和排程的一個獨立單位;

  三 執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),一個執行緒可以建立和撤銷另一個執行緒;

  一 程序與執行緒區別與聯絡

  (1) 劃分尺度:執行緒更小,所以多執行緒程式併發性更高;

  (2) 資源分配&處理器排程:程序是資源分配的基本單位,執行緒是處理器排程的基本單位。      (3) 地址空間:程序擁有獨立的地址空間;執行緒沒有獨立的地址空間,同一程序內多個執行緒共享其資源。

  (4) 執行:每個執行緒都有一個程式執行的入口,順序執行序列和程式的出口,但執行緒不能單獨執行,必須組成程序,一個程序至少有一個主執行緒。簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒。

  二 程序和程式區別和聯絡

  (1)程式只是一組指令的有序集合,它本身沒有任何執行的含義,它只是一個靜態的實體。而程序則不同,它是程式在某個資料集上的執行。程序是一個動態的實體,它有自己的生命週期。反映了一個程式在一定的資料集上執行的全部動態過程。

  (2)程序和程式並不是一一對應的,一個程式執行在不同的資料集上就成為不同的程序,可以用程序控制塊來唯一地標識每個程序。而這一點正是程式無法做到的,由於程式沒有和資料產生直接的聯絡,既使是執行不同的資料的程式,他們的指令的集合依然是一樣的,所以無法唯一地標識出這些運行於不同資料集上的程式。一般來說,一個程序肯定有一個與之對應的程式,而且只有一個。而一個程式有可能沒有與之對應的程序(因為它沒有執行),也有可能有多個程序與之對應(執行在幾個不同的資料集上)。

  (3)程序還具有併發性和交往性,這也與程式的封閉性不同。

  程序和程式區別和聯絡表現在以下方面:

  1)程式只是一組指令的有序集合,它本身沒有任何執行的含義,它只是一個靜態的實體。而程序則不同,它是程式在某個資料集上的執行。

  程序是一個動態的實體,它有自己的生命週期。它因建立而產生,因排程而執行,因等待資源或事件而被處於等待狀態,因完成任務而被撤消。反映了一個程式在一定的資料集上執行的全部動態過程。

  2)程序和程式並不是一一對應的,一個程式執行在不同的資料集上就成為不同的程序,可以用程序控制塊來唯一地標識每個程序。而這一點正是程式無法做到的,由於程式沒有和資料產生直接的聯絡,既使是執行不同的資料的程式,他們的指令的集合依然是一樣的,所以無法唯一地標識出這些運行於不同資料集上的程式。一般來說,一個程序肯定有一個與之對應的程式,而且只有一個。而一個程式有可能沒有與之對應的程序(因為它沒有執行),也有可能有多個程序與之對應(執行在幾個不同的資料集上)。

  3)程序還具有併發性和交往性,這也與程式的封閉性不同。程序和執行緒都是由作業系統所體會的程式執行的基本單元,系統利用該基本單元實現系統對應用的併發性。程序和執行緒的區別在於:

  簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒.

  執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。

  另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

  執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

  從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。

  程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位.

  執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源.

  一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行.