官术网_书友最值得收藏!

8.1 進程與線程的概念及區別

Linux系統各種軟件和服務存在于系統,必然會占用系統各種資源,系統資源是如何分配及調度的,本節將給讀者展示系統進程、資源及調度相關的內容。

進程(process)是計算機中的軟件程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。

在早期面向進程設計的計算機結構中,進程是程序的基本執行實體,在當代面向線程設計的計算機結構中,進程是線程的容器。軟件程序是對指令、數據及其組織形式的描述,而進程是程序的實體,通常而言,把運行在系統中的軟件程序稱之為進程。

除了進程,讀者通常會聽到線程的概念,線程也被稱為輕量級進程(lightweight process,LWP),是程序執行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。

線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有操作系統資源,但是該線程可與同屬進程的其他線程共享該進程所擁有的全部資源。

程序、進程、線程三者區別如下。

□程序:程序并不能單獨執行,是靜止的,只有將程序加載到內存中,系統為其分配資源后才能夠執行。

□進程:程序對一個數據集的動態執行過程,一個進程包含一個或者更多的線程,一個線程同時只能被一個進程所擁有,進程是分配資源的基本單位。進程擁有獨立的內存單元,而多個線程共享內存,從而提高了應用程序的運行效率。

□線程:線程是進程內的基本調度單位,線程的劃分尺度小于進程,并發性更高,線程本身不擁有系統資源,但是該線程可與同屬進程的其他線程共享該進程所擁有的全部資源。每一個獨立的線程,都有一個程序運行的入口、順序執行序列和程序的出口。

程序、進程、線程三者的關系拓撲圖如圖8-1所示。

圖8-1 程序、進程、線程三者的關系拓撲圖

如圖8-1所示,多進程、多線程的區別如下。

□多進程:每個進程互相獨立,不影響主程序的穩定性,某個子進程崩潰對其他進程沒有影響,通過增加CPU可以擴充軟件的性能,可以減少線程加鎖/解鎖的影響,極大提高性能。缺點是多進程邏輯控制復雜,需要和主程序交互,需要跨進程邊界,進程之間上下文切換比線程之間上下文切換代價大。

□多線程:無須跨進程,程序邏輯和控制方式簡單,所有線程共享該進程的內存和變量等。缺點是每個線程與主程序共用地址空間,線程之間的同步和加鎖控制比較麻煩,一個線程的崩潰會影響到整個進程或者程序的穩定性。

主站蜘蛛池模板: 南郑县| 定日县| 日喀则市| 郧西县| 星子县| 西安市| 历史| 华宁县| 西和县| 伊金霍洛旗| 宁明县| 裕民县| 河北区| 西吉县| 英吉沙县| 滁州市| 喀什市| 张掖市| 南岸区| 三台县| 自贡市| 昭通市| 丹巴县| 邹城市| 安溪县| 额敏县| 孟津县| 杭锦旗| 环江| 罗甸县| 东阿县| 色达县| 余姚市| 楚雄市| 睢宁县| 都匀市| 大洼县| 田林县| 曲周县| 松溪县| 济源市|