- 曝光:Linux企業運維實戰
- 吳光科
- 962字
- 2019-10-16 10:22:05
8.1 進程與線程的概念及區別
Linux系統各種軟件和服務存在于系統,必然會占用系統各種資源,系統資源是如何分配及調度的,本節將給讀者展示系統進程、資源及調度相關的內容。
進程(process)是計算機中的軟件程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。
在早期面向進程設計的計算機結構中,進程是程序的基本執行實體,在當代面向線程設計的計算機結構中,進程是線程的容器。軟件程序是對指令、數據及其組織形式的描述,而進程是程序的實體,通常而言,把運行在系統中的軟件程序稱之為進程。
除了進程,讀者通常會聽到線程的概念,線程也被稱為輕量級進程(lightweight process,LWP),是程序執行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。
線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有操作系統資源,但是該線程可與同屬進程的其他線程共享該進程所擁有的全部資源。
程序、進程、線程三者區別如下。
□程序:程序并不能單獨執行,是靜止的,只有將程序加載到內存中,系統為其分配資源后才能夠執行。
□進程:程序對一個數據集的動態執行過程,一個進程包含一個或者更多的線程,一個線程同時只能被一個進程所擁有,進程是分配資源的基本單位。進程擁有獨立的內存單元,而多個線程共享內存,從而提高了應用程序的運行效率。
□線程:線程是進程內的基本調度單位,線程的劃分尺度小于進程,并發性更高,線程本身不擁有系統資源,但是該線程可與同屬進程的其他線程共享該進程所擁有的全部資源。每一個獨立的線程,都有一個程序運行的入口、順序執行序列和程序的出口。
程序、進程、線程三者的關系拓撲圖如圖8-1所示。

圖8-1 程序、進程、線程三者的關系拓撲圖
如圖8-1所示,多進程、多線程的區別如下。
□多進程:每個進程互相獨立,不影響主程序的穩定性,某個子進程崩潰對其他進程沒有影響,通過增加CPU可以擴充軟件的性能,可以減少線程加鎖/解鎖的影響,極大提高性能。缺點是多進程邏輯控制復雜,需要和主程序交互,需要跨進程邊界,進程之間上下文切換比線程之間上下文切換代價大。
□多線程:無須跨進程,程序邏輯和控制方式簡單,所有線程共享該進程的內存和變量等。缺點是每個線程與主程序共用地址空間,線程之間的同步和加鎖控制比較麻煩,一個線程的崩潰會影響到整個進程或者程序的穩定性。
- Linux運維之道(第3版)
- 每天5分鐘玩轉Kubernetes
- Social Media Mining with R
- Linux Mint Essentials
- 鴻蒙生態:開啟萬物互聯的智慧新時代
- 深入理解eBPF與可觀測性
- Moodle 3.x Teaching Techniques(Third Edition)
- Kali Linux高級滲透測試
- Mastering AWS CloudFormation
- 樹莓派+傳感器:創建智能交互項目的實用方法、工具及最佳實踐
- Microsoft DirectAccess Best Practices and Troubleshooting
- Microsoft Azure Administrator:Exam Guide AZ-103
- Apache ShardingSphere權威指南
- Instant Getting Started with VMware Fusion
- OpenSolaris系統管理