操作系統原理-進程和線程的區別

進程和線程是兩個緊密相關的概念,它們最主要的區別是線程是進程的一部分,一個進程可以包含多個線程,但是線程不能包含進程。每個可執行的程序都包含兩個基本部分,即進程和線程。它們都是用於執行一系列的指令,都是由程序或系統進行初始化。

進程是可執行程序的一個實例,它包含程序代碼和當前程序中的所有活動。根據不同的操作系統,一個進程可能有多個不同的線程併發的執行各自的指令。程序是一系列指令的集合,而這些指令最終都由進程執行。進程包含了執行程序時所需要的環境,即運行時所需要的系統資源,每個進程都有各自的內存空間。可能很多人以爲進程等同於應用程序,但是實際上,一個應用程序在運行的時候,可能會包括很多個相關的進程。爲了實現進程間通信 IPC(即 Inter Process Communication),很多系統都用 pipes、sockets 等工具來實現。IPC 不僅用於同一系統中的不同進程間的通信,還可用於不同系統的進程間通信。

一個線程可以執行一系列的程序指令,不同系統的進程和線程實現是不一樣的。但是對所有系統來說,線程都是進程的組成部分,一個進程中至少要有一個線程。同一進程中的多個線程可共享這個進程的資源,這樣也有利於實現線程間通信。

在單處理器系統中,處理器通過在不同的時間切換不同的線程來實現多任務併發。線程的切換速度是非常快的,所以會給人一種所有線程都同時在運行的感覺。在多處理器系統中,不同的線程可以在不同的處理器上同時運行,實現真正的並行處理。

綜上,線程可以看作是輕量級的進程 ,它可以在一個進程裏面執行一系列的指令。計算機系統可以併發或並行的運行多個進程和線程。

 

下表詳細描述了進程和線程的區別

 

 

進程

線程

定義

一個程序的正在執行的實例叫進程

線程是進程的組成部分

處理方法

它從父進程中拷貝數據,並對這些數據進行操作

它可直接訪問所在進程中的數據

通信

進程間通信只能通過 IPC 實現

一個進程中的線程間可直接相互訪問

運行開銷

通常進程運行的開銷是比較大的

線程可當作輕量級進程,運行開銷非常小

創建方式

新進程只能通過拷貝父進程的方式來創建

新線程的創建非常簡單,無需複製,可直接生成

控制方式

一個進程只能控制它的子進程

一個進程中的所有線程間都可相互操作

改變影響

任何父進程的改變都不會影響到它的子進程

主線程的改變會影響到其它子線程的行爲,而子線程的改變通常不會相互影響

運行內存

每個進程都運行在自己的內存空間中

所有子線程都共享同一內存空間

文件描述符

大多數文件描述符都不能共享

子線程可共享文件描述符

文件系統

文件系統的上下文不可共享

子線程間共享文件系統上下文

信號

信號處理不能共享

子線程間共享信息處理

控制者

進程由操作系統控制

通常主線程由進程控制,而子線程可由程序員創建和控制

依賴

一個進程的運行不需要依賴其它進程

線程的運行依賴於進程,即線程無法獨立存在

 

 

 

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