首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言實例:線程概述與進程關係探析

     編輯:關於C語言

線程與進程的核心區別

在作業系統中,進程是資源分配的基本單位,代表一個正在執行的程式;而線程則是進程內部的執行單元,常被稱為「輕量級進程」。線程由進程創建,擁有獨立的棧空間,但共享進程的堆、全局變量、文件描述符等資源。這種設計使得線程切換開銷遠小於進程,適合高併發場景。

實戰觀察:Firefox 進程與線程關係

我們可以通過 ps 指令直觀查看系統中的進程與線程結構:

1. 查看進程列表

$ ps x
PID TTY STAT TIME COMMAND
...
3740 ? Sl 0:02 /usr/lib/firefox/firefox  # Firefox 主進程
...

2. 顯示線程層級結構

$ ps xH
PID TTY STAT TIME COMMAND
...
3740 ? Sl 0:02 /usr/lib/firefox/firefox  # 主進程
3740 ? Sl 0:00 /usr/lib/firefox/firefox  # 線程 1
3740 ? Sl 0:00 /usr/lib/firefox/firefox  # 線程 2
... (共 30+ 行 PID 均為 3740)

關鍵觀察:所有線程的 PID 與主進程完全一致,驗證了「線程共享進程資源」的特性。嚴格來說,線程在內核中無獨立 PID,此處顯示的是所屬進程的 PID。

3. 精確檢視指定進程的線程

$ ps mp 3740
PID TTY STAT TIME COMMAND
3740 ? - 0:02 /usr/lib/firefox/firefox
- - Sl 0:01 -        # 線程(無獨立 PID)
- - Sl 0:00 -
...

輸出確認:線程條目無 PID 欄位,僅顯示狀態與 CPU 時間,進一步證明線程非獨立調度實體。

核心總結

  • 資源共享:線程共享進程的代碼段、數據段、堆、文件描述符
  • 獨立實體:各線程擁有獨立棧、程序計數器、寄存器組
  • 調度單位:現代 OS 以線程為基本調度單元,進程成為資源容器

理解進程與線程的關係,是掌握併發編程、多線程同步機制(互斥鎖、條件變量、信號量)的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved