Linux線程——基礎全解

一、什么是線程(Thread)?

? 定義:

線程是程序執行的最小單位。即線程(Thread)是操作系統能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。一個進程可以并發多個線程,每個線程執行不同的任務。
一個進程中可以包含多個線程,這些線程共享進程的資源,但獨立執行不同的任務

🔄 通俗理解:

進程比作一個公司,那線程就是公司里的員工
進程負責提供資源,線程負責執行具體任務。

線程的組成要素

每個線程都包含以下核心組件:

  • 線程ID:唯一標識符

  • 程序計數器:當前指令地址

  • 寄存器集合:CPU寄存器狀態

  • :用于函數調用和局部變量

  • 狀態:運行、就緒、阻塞等

二、線程與進程的關系與區別

1. 關系圖解

2. 詳細對比

特性進程線程
資源占用高(獨立內存空間)低(共享進程內存)
創建開銷大(需要復制父進程資源)小(僅需創建棧和寄存器)
通信方式復雜(管道、消息隊列等)簡單(共享內存直接訪問)
切換成本高(完整上下文切換)低(部分上下文切換)
容錯性高(一個崩潰不影響其他)低(一個崩潰可能導致整個進程終止)
并發性依賴多核CPU真正并行執行
資源隔離完全隔離共享大部分資源
創建時間10-100毫秒10-100微秒

三、為什么使用線程?

1. 性能提升

  • 多核利用:現代CPU多核心設計,多線程可充分利用硬件資源

  • 減少等待:I/O操作時CPU可切換執行其他線程

  • 并行計算:分割任務并行處理加速計算

2. 響應性提升

  • GUI應用:后臺任務不影響用戶界面響應

  • 網絡服務:同時處理多個客戶端請求

3. 資源共享高效

  • 線程共享內存空間,通信成本低

  • 避免進程間通信(IPC)的復雜性

4. 經濟實惠

  • 創建線程比創建進程快10-100倍

  • 線程切換比進程切換快10-100倍

四、多線程運行的基本原理

1. 線程調度模型

  • Scheduler:調度器,負責決定哪個線程獲得 CPU 執行。

  • CPU:執行實體,一次只能運行一個線程。

  • 線程1、線程2、線程3:用戶創建的多個線程,處于不同狀態(執行、等待、就緒等)。

起初,調度器將CPU的使用權分配給線程1,線程1開始執行。當線程1的時間片用完后,CPU不再繼續執行它,而是通知調度器進行線程切換。隨后,線程2被調度上來接管CPU,繼續執行任務。

在線程2運行的過程中,它遇到了I/O操作(如讀取磁盤或等待網絡數據),因此無法繼續執行,此時線程2進入等待狀態,釋放了CPU資源。調度器隨即將CPU切換給線程3,讓線程3開始運行。線程3繼續在CPU上執行,直到它的時間片也結束或發生其他調度事件。

整個過程中可以看出,多線程的并發執行并非多個線程同時在CPU上運行,而是由調度器在多個線程之間快速切換,讓它們“輪流”使用CPU,這種機制稱為時間片輪轉調度。同時,如果某個線程由于等待I/O等原因無法執行,系統會自動將CPU切換給其他就緒線程,從而避免CPU空閑,提高系統效率。

這張圖很好地體現了線程調度的兩個核心原理:時間片耗盡導致的主動切換線程阻塞時的被動讓出CPU。在實際應用中,操作系統會不斷地根據線程的狀態(就緒、運行、等待)做出調度決策,確保所有線程能夠高效地共享CPU資源。

核心概念總結
  • 調度器:操作系統的"交通警察",決定哪個線程獲得CPU使用權

  • 時間片:每個線程獲得CPU的固定時間段(通常10-100ms)

  • 線程切換:當發生以下事件時觸發:

    • 時間片耗盡

    • 等待I/O等阻塞操作

    • 高優先級線程就緒

  • CPU利用率:通過快速切換線程,避免CPU空閑(如線程2等待I/O時執行線程3)

2. 用戶級線程 vs 內核級線程

類型優點缺點代表實現
用戶級線程切換快、不依賴OS無法利用多核、阻塞問題Python線程
內核級線程真正并行、阻塞不影響其他切換成本高Java線程
混合模型結合兩者優勢實現復雜Go goroutine

五、線程內存空間分配

1. 內存布局詳解

2. 關鍵區域說明

內存區域共享性內容大小限制
代碼區共享程序指令固定
全局數據區共享全局/靜態變量固定
堆區共享動態分配內存可擴展
棧區私有局部變量、函數調用有限(通常8MB)
線程局部存儲私有線程特有數據可配置

3. 棧空間管理

每個線程擁有獨立的棧空間:

  • 默認大小:Linux 8MB,Windows 1MB

  • 可調整大小

pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, 16*1024*1024); // 16MB
pthread_create(&thread, &attr, start_routine, arg);
  • 溢出風險:遞歸過深或大型局部變量可能導致棧溢出

六、使用線程的注意事項

問題原因解決方案
? 數據競爭多線程同時修改共享數據使用互斥鎖(mutex)保護關鍵區
? 死鎖多線程互相等待鎖資源保持加鎖順序,避免嵌套鎖
? 線程泄漏未 join 或 detach 線程pthread_join()pthread_detach()
? 棧空間耗盡創建線程太多限制線程數,使用線程池
? 調試困難多線程運行順序不可控打印調試日志,使用 GDB 多線程調試

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87928.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎--封裝+static

目錄 什么是封裝? 什么是訪問限定符? static靜態修飾符 用static修飾的類變量或類方法的注意事項: 什么是封裝? 封裝是面向對象的三大特性之一,指的是將一個類中的實現細節進行隱藏,對外只提供一些開放…

DAY 51 復習日

作業:day43的時候我們安排大家對自己找的數據集用簡單cnn訓練,現在可以嘗試下借助這幾天的知識來實現精度的進一步提高import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as trans…

針對網絡爬蟲的相關法律法規整理

在中國,網絡爬蟲的法律法規涉及多個層面,包括個人信息保護、數據安全、網絡安全、知識產權、反不正當競爭等。以下是詳細的法律法規分析及合規指南: 1. 核心法律法規及適用場景? ??(1)《民法典》——隱私權與個人信…

1.1_5_2 計算機網絡的性能指標(下)

繼續來看計算機網絡的性能指標,接下來我們探討時延,時延帶寬積和往返時延,以及信道利用率這幾個性能指標。 首先來看時延這個性能指標,英文叫delay,也有的教材,把它翻譯為延遲。所謂的時延,就是…

PP-OCRv2:超輕OCR系統的萬能包

PP-OCRv2:超輕OCR系統的萬能包摘要光學字符識別(OCR)系統已廣泛應用于多種場景,但設計兼顧精度與效率的OCR系統仍具挑戰性。我們此前提出的超輕量OCR系統PP-OCR在平衡兩者方面取得進展。本文進一步提出PP-OCRv2,通過五…

常見的軟件版本開源協議

開源軟件許可證核心指南 一、許可證基礎分類 1. 寬松型許可證(Permissive) 核心特征:允許閉源衍生,僅保留版權聲明適用場景:商業集成、快速開發代表協議: 📜 MIT 📜 Apache 2.0 &…

基于FPGA的一維序列三次樣條插值算法verilog實現,包含testbench

目錄 1.前言 2.算法運行效果圖預覽 3.算法運行軟件版本 4.部分核心程序 5.算法仿真參數 6.算法理論概述 7.參考文獻 8.算法完整程序工程 1.前言 三次樣條插值是一種在數據擬合和信號處理中廣泛應用的技術,它通過構造分段三次多項式來逼近給定的離散數據點&a…

RAG 之 Prompt 動態選擇的三種方式

“如果我有5個prompt模板,我想只選擇一個每次都自動五選一能做到嗎怎么做?” 完全可以做到。這在復雜的RAG或Agentic工作流中是一個非常普遍且關鍵的需求,通常被稱為“條件路由(Conditional Routing)”或“動態調度&am…

【ROS2 自動駕駛學習】02-安裝ROS2及其配套工具

目錄 一、設置語言環境 二、添加存儲庫 三、添加軟件源 四、安裝ROS2 五、配置環境 六、測試ROS2 七、安裝一些工具 7.1 terminator 7.2 colcon工具 7.3 tf工具 7.4 joint-state-publisher工具 7.5 urdf 八、安裝三方庫 8.1 Eigen 8.2 yaml-cpp 8.3 matplotl…

系統學習Python——并發模型和異步編程:基礎知識

分類目錄:《系統學習Python》總目錄 并行是并發的一種特殊情況。**所有并行系統都是并發的,但不是所有并發系統都是并行的。**在21世紀初,我們可以使用單核設備在GNU Linux上同時處理100個進程。一臺擁有4個CPU核的現代筆記本計算機&#xff…

睿爾曼系列機器人——以創新驅動未來,重塑智能協作新生態(下)

在智能制造與人工智能深度融合的當下,機器人技術正經歷從 “功能替代” 到 “價值共創” 的深刻躍遷。睿爾曼,作為全球超輕量仿人機械臂領域的先行者,始終秉持 “讓機器人觸手可及” 的使命,憑借底層技術的突破性進展,…

表征工程(Representation Engineering, RepE)

表征工程(Representation Engineering, RepE) 近年來,表征工程(Representation Engineering, RepE)在提升AI系統透明度和可控性方面取得了顯著進展。 一、大模型可解釋性與可控性的突破 核心論文:《Representation Engineering: A Top-Down Approach to AI Transparen…

國產ARM+FPGA工業開發平臺——GM-3568JHF

一、引言 隨著物聯網和國產替代需求的快速發展,嵌入式系統面臨計算性能與硬件靈活性的雙重挑戰。GM-3568JHF開發板基于國產“ARMFPGA”異構架構,結合瑞芯微RK3568J處理器與紫光同創Logos-2 FPGA芯片,支持國產自主操作系統,滿足通…

RISCV Linux 虛擬內存精講系列一 Sv39

筆者認為,Linux 操作系統(Operating System)最核心的機制是虛擬內存(Virtual Memory)。因為,操作系統主要作用是將硬件環境抽象起來,給在其中運行的應用(Applications)提…

【apply from: “$flutterRoot/packages/flutter_tools/gradle/flutter.gradle“作用】

這行代碼的作用是將 Flutter 的 Gradle 構建腳本集成到 Android 項目中,具體細節如下:作用解析:引入 Flutter 構建邏輯 flutter.gradle 是 Flutter SDK 的核心構建腳本,它負責: 編譯 Dart 代碼為原生二進制文件&#x…

深入理解JavaScript設計模式之命令模式

深入理解JavaScript設計模式之命令模式 文章目錄深入理解JavaScript設計模式之命令模式定義簡單命令模式組合命令模式使用命令模式實現文本編輯器目標關鍵類說明實現的效果交互邏輯流程所有代碼:總結定義 命令模式也是設計模式種相對于變焦簡單容易理解的一種設計模…

CSS 網頁布局:從基礎到進階

CSS 網頁布局:從基礎到進階 引言 隨著互聯網的飛速發展,網頁設計已經成為了一個不可或缺的領域。CSS(層疊樣式表)作為網頁設計中的關鍵工具,用于控制網頁元素的樣式和布局。本文將為您全面解析CSS網頁布局,…

【人工智能】大語言模型(LLM) NLP

大語言模型(LLM)& NLP1.大語言模型(LLM)1.1 一句話解釋1.2 更形象的比喻1.3 為什么叫 “大” 模型1.4 它能做什么1.5 現實中的例子2.對比 NLP2.1 用 “汽車進化” 比喻 NLP → LLM2.2 為什么說 LLM 屬于 NLP2.3 LLM 的 “革命…

Unity HDRP + Azure IoT 的 Python 后端實現與集成方案

Unity HDRP Azure IoT 的 Python 后端實現與集成方案 雖然Unity HDRP本身使用C#開發,但我們可以構建Python后端服務支持物聯網系統,并與Unity引擎深度集成。以下是完整的實現方案: 系統架構 #mermaid-svg-qCDb0g9Ik287Cg8X {font-family:&qu…

小黑黑日常積累大模型prompt句式2:【以段落的形式輸出,不分點列舉】【如果沒有相關內容則不輸出】【可讀性強】【輸出格式規范】

以段落的形式輸出,不分點列舉 每個標題下直接接續段落內容,不編號、不分點。......標題下直接接續段落內容,不繼續進行分點列舉。如果沒有相關內容則不輸出 若某一部分無法從原文中提取有效信息,則跳過該部分內容,不做…