進程與線程,進程與程序及作業的區別和聯繫

轉自:https://blog.csdn.net/jxq0816/article/details/50200023, https://blog.csdn.net/gao_zhennan/article/details/72970394, https://blog.csdn.net/xiexievv/article/details/7294189

程序的定義:程序是指令的有序集合。是一個在時間上按照嚴格次序前後相繼的操作序列。 

進程的定義:可併發執行的程序在數據集上的一次執行過程。指在系統中正在運行的一個應用程序,是系統資源分配的基本單位。

區別與聯繫:

(1)程序是永存的;進程是暫時存在的。即進程是有生命週期的,創建,執行,撤銷等
(2)程序是靜態的觀念,進程是動態的觀念
(3)一個程序可對應多個進程; 一個進程可以執行一個程序或多個程序 
(4)進程具有併發性,而程序沒有
(5)進程是競爭計算機資源的基本單位,程序不是

1)進程是程序及其數據在計算機的一次運行活動,是一個運行過程,是一個動態的概念。進程的運行實體是程序,離開程序的進程沒有存在的意義。而程序是一組有序的指令集合,是一種靜態概念。

2)進程是程序的一次執行過程,它是動態地創建和消亡的,具有一定的生命週期,是暫時存在的;而程序則是一組代碼的集合,它是永久存在的,可長期保存。

3)一個進程可以執行一個或幾個程序,一個程序也可以構成多個進程。進程可以創建進程,而程序不能形成新的程序。

4)進程和程序的組成不同。從靜態角度看,進程由程序、數據和進程控制塊(PCB)三部分組成。而程序是一組有序的指令集合。
 

作業指用戶在一次解決或是一個事務處理過程中要求計算機系統所做的工作的集合。作業由三部分組成,即程序、數據和作業說明書。一個作業可以包含多個程序和多個數據集。在執行一個作業可能會運行多個不同的進程。

線程(thread)是進程內相對獨立的可執行單元,所以也被稱爲輕量進程(lightweight processes);是操作系統進行任務調度的基本單元。它與父進程的其它線程共享該進程所擁有的全部代碼空間和全局變量,但擁有獨立的堆棧(即局部變量對於線程來說是私有的)。

進程與線程的聯繫:

 一個進程至少擁有一個線程——主線程,也可以擁有多個線程;一個線程必須有一個父進程。多個進程可以併發執行;一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以併發執行。

進程與線程的區別:

系統開銷:在創建或撤消進程時,由於系統都要爲之分配和回收資源,導致系統的開銷明顯大於創建或撤消線程時的開銷

資源管理:進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。

通信方式:進程間通信主要包括管道、系統IPC(包括消息隊列,信號量,共享存儲)、SOCKE,進程間通信其實是指分屬於不同進程的線程之間的通訊,所以進程間的通信方法同樣適用於線程間的通信。但對應歸於同一進程的不同線程來說,使用全局變量進行通信效率會更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章