C#線程理解

目錄

一.線程類

1.基礎線程類(Thread)

2.線程池類(Threadpool)

3.任務并行庫(Task)

4.并行循環(Parallel)

二.線程池(threadPool)和Thread/Task之間的聯系

1.ThreadPool和Thread的關系

2.ThreadPool和Task的關系

三.Thread和task的區別

1.抽象層次不同

2.資源消耗和效率

四.什么是操作系統資源/線程資源?

1.操作系統資源

2.線程資源

一.線程類

1.基礎線程類(Thread)

Thread類:最基礎的線程操作類,可以直接創建和控制單個線程。

特點:輕量級,但是創建和銷毀成本比較高,適合長時間運行的任務。

使用場景:需要精細控制線程(如:優先級,長事件運行)

2.線程池類(Threadpool)

ThreadPool類:管理一個線程池,用于復用線程執行短期任務,減少線程創建銷毀的開銷。

特點:自動管理線程聲明周期,適合大量短期任務。

使用場景:執行大量短期任務;

常用方法:

ThreadPool.QueueUserWorkItem(DoWork, "參數");
//將任務加入線程池隊列
3.任務并行庫(Task)

Task類:基于線程池的高級抽象,提供更靈活的任務管理和異步操作。

特點:支持任務調度,延續操作,取消機制,獲取結果等功能。

Task是基于ThreadPool(或Thread)的高級封裝,基本場景都適用

4.并行循環(Parallel)

Parallel類:提供簡單的并行迭代功能(如:for,foreach)自動利用線程池。

Parallel.For(0, 100, i => ProcessItem(i));

二.線程池(threadPool)和Thread/Task之間的聯系

1.ThreadPool和Thread的關系

1.ThreadPool是Thread的管理者

Thread是最底層的線程對象,直接對應操作系統的線程資源。而ThreadPool(線程池)是對Thread的封裝和管理機制,它維護一個線程集合(“池”),當有任務需要執行時,會優先復用池中已存在的空閑線程,避免頻繁創建和銷毀Thread對象(這是一項昂貴的操作)。

2.threadPool對Thread的復用邏輯

當通過ThreadPool.QueueUserWorkItem()提交任務時,線程池會:

  • 若池中有空閑線程,直接分配該線程執行任務;

  • 若池中線程都在忙碌且未達最大線程數限制,會創建新的Thread加入池并執行任務;

  • 若達到最大限制,任務會進入隊列等待,直到有線程空閑。

2.ThreadPool和Task的關系

1.Task是ThreadPool的高級接口

Task(任務并行庫 TPL 的核心)是比ThreadPool更高層次的抽象,它默認基于ThreadPool實現(特殊情況除外,如TaskCreationOptions.LongRunning會直接創建新線程)。
簡單說:Task.Run(...)new Task(...).Start()本質上是向線程池提交任務,由線程池中的Thread執行。

2.Task 對 ThreadPool 的擴展

  • ThreadPool僅提供簡單的任務排隊功能,而Task在此基礎上增加了豐富的特性:

    • 任務返回值(Task<TResult>);

    • 任務延續(ContinueWith);

    • 取消機制(CancellationToken);

    • 異常處理(通過try/catch捕獲任務內異常);

    • 父子任務關聯等。

三.Thread和task的區別

1.抽象層次不同
  • Thread:是對操作系統線程的直接封裝(1:1 映射),屬于底層 API,直接操作線程資源。

  • Task:是基于線程池的高級抽象(.NET 4.0 引入的 TPL 任務并行庫核心),不直接對應單個線程,而是表示一個 “待執行的工作單元”。

2.資源消耗和效率
  • Thread

    • 創建和銷毀成本高(涉及操作系統內核對象操作)。

    • 每個Thread占用獨立的棧空間(默認 1MB),大量創建可能導致內存壓力。

    • 不適合頻繁創建短期任務。

  • Task

  • 默認使用線程池中的線程(除非指定TaskCreationOptions.LongRunning),避免頻繁創建新線程。

  • 資源消耗低,適合批量處理短期任務(如并行計算、IO 操作回調)。

  • 線程池會自動管理線程復用,效率更高

四.什么是操作系統資源/線程資源?

1.操作系統資源

指操作系統管理的所有硬件和軟件資源的總稱,是計算機系統運行的基礎。線程本身也是操作系統資源的一種,其他常見的操作系統資源還包括:

  • 硬件資源:CPU、內存(物理內存、虛擬內存)、硬盤、網絡接口、顯卡等。

  • 軟件資源:文件句柄(打開的文件)、網絡連接(Socket)、進程、線程、互斥鎖(Mutex)、信號量(Semaphore)等。

  • 操作系統通過內核(Kernel)統一管理這些資源,進程 / 線程需要通過系統調用(System Call)向內核申請或釋放資源。

2.線程資源

是操作系統資源的一個子集,特指為線程運行所分配的系統資源,主要包括:

  • 線程內核對象:操作系統內核中記錄線程狀態的數據結構(如線程 ID、優先級、狀態等)。

  • 線程棧:獨立的內存區域(默認在 Windows 上為 1MB),用于存儲線程執行時的局部變量、函數調用棧等。

  • 寄存器狀態:CPU 寄存器中保存的線程執行上下文(如指令指針、棧指針等),用于線程切換時恢復執行狀態。

簡單說:一個線程(無論通過 C# 的Thread類創建,還是操作系統原生線程)本質上是操作系統分配的一組 “線程資源” 的集合

3.C#中Thread類和操作系統線程資源的關系

C# 中的Thread類是對操作系統線程資源的封裝:

  • 當你創建new Thread(...)時,.NET 運行時會通過系統調用(如 Windows 的CreateThread)向操作系統申請線程資源

  • 操作系統內核會為其分配線程內核對象、棧空間等資源,并將線程加入調度隊列。

  • 當調用Start()時,操作系統會調度該線程在 CPU 上執行

  • 當線程執行完畢或被銷毀時,.NET 會釋放對應的操作系統線程資源(歸還給系統)。

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

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

相關文章

Java入門級教程16——JUC的安全并發包機制

目錄 1.JUC的安全并發包機制 1.1 包含 1.2 Barrier(柵欄)機制——CyclicBarrier&#xff08;循環屏障&#xff09; 1.2.1 定義 1.2.2 特性 1.2.1 模擬包車 1.2.2 模擬學生到齊上課 1.2.3 計算任務總耗時 1.3 CountDownLatch(閉鎖)機制 1.3.1 定義 1.3.2 特性 1.3.3…

【網絡通信】全面解析MAC地址:網絡設備的唯一標識

【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識 文章目錄【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識前言一、MAC 地址的定義&#xff1a;設備的 “網絡身份證”?二、MAC 地址的格式與組成&#xff1a;48 位的 “數字編碼”?三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默認啟用現代分析引擎、支持 MISRA C:2025 新規、CI構建性能提升等

Perforce Klocwork 現已更新至2025.2版本&#xff01;該版本增強了對 C/C的分析能力&#xff0c;提升了現代 C 分析的準確性&#xff0c;并改進了對源文件編碼的支持。該版本還為 MISRA C:2025 標準引入了新的分類體系&#xff0c;并增強了 Visual Studio Code 插件的可用性。 …

機器人馭風而行:低空經濟如何開啟智能新紀元【科普類】

新晉碼農一枚&#xff0c;小編會定期整理一些寫的比較好的代碼和知識點&#xff0c;作為自己的學習筆記&#xff0c;試著做一下批注和補充&#xff0c;轉載或者參考他人文獻會標明出處&#xff0c;非商用&#xff0c;如有侵權會刪改&#xff01;歡迎大家斧正和討論&#xff01;…

Java學習筆記四(繼承)

1 繼承繼承的實現&#xff1a;public class 子類 extends 父類 {… }注釋&#xff1a;子類可直接使用&#xff0c;父類&#xff08;保護&#xff0c;公開&#xff09;的屬性和方法優點&#xff1a;減少重復代碼&#xff0c;缺點&#xff1a;只能單繼承// 父類 public class Tes…

NAT技術:SNAT與DNAT區別詳解

1. 什么是NAT&#xff1f; 定義&#xff1a;NAT 是一種網絡技術&#xff0c;用于在私有網絡&#xff08;如家庭或企業局域網&#xff09; 與 公共網絡&#xff08;如互聯網&#xff09; 之間轉換IP地址。它允許使用私有IP地址的設備通過一個&#xff08;或多個&#xff09;公共…

java語言中,list<String>轉成字符串,逗號分割;List<Integer>轉字符串,逗號分割

java語言中&#xff0c;list<String 轉成字符串&#xff0c;逗號分割 在 Java 中&#xff0c;將 List<String> 轉成逗號分割的字符串有多種方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一個靜態方法&#xff0c;它可以方便地將集合中的元素用…

NineData云原生智能數據管理平臺新功能發布|2025年8月版

本月發布 11 項更新&#xff0c;其中重點發布 5項、功能優化 6 項。重點發布數據庫 DevOps - SQL 窗口支持 PolarDB 系列SQL 窗口新增支持 PolarDB PostgreSQL 與 PolarDB Oracle 數據源&#xff0c;擴展云原生數據庫管理能力。新增 AWS 數據源支持新增支持 AWS Aurora Postgre…

【ARDUINO】通過ESP8266連接WIFI,啟動TCP,接受TCP客戶端指令【測試中】

通過ESP8266連接WIFI&#xff0c;啟動TCP&#xff0c;接受TCP客戶端指令**記錄**2025年9月8日11:20:372025年9月9日08:45:342025年9月11日21:40:22**代碼**記錄 2025年9月8日11:20:37 【測試情況】 代碼可以跑到正確連接WIFI&#xff0c;也能獲得IP&#xff0c;但是啟動TCP服…

(網絡原理)核心知識回顧 網絡核心原理 get和post的理解 解析http 加密+請求和響應的一些關鍵字 Cookie和session 對密鑰的理解

目錄 核心知識回顧 網絡核心原理 get和post的理解 解析http 加密請求和響應的一些關鍵字 Cookie和session 對密鑰的理解 核心知識回顧 網絡編程---socket api UDP DatagramSocket DatagramPacket TCP ServerSocket Socket 1.讀寫數據通過Socket,通過Socket內置的 lnpu…

前端框架對比分析:離線PWA + Cloudflare Workers部署

目錄 概述 框架對比表格 詳細分析 1. Astro ????? **強烈推薦** 2. Next.js ???? **推薦** 3. Remix (現React Router) ????? **強烈推薦** 4. SvelteKit ???? **推薦** 5. Nuxt.js ??? **一般推薦** 6. Vite + React ??? **基礎選擇** 推薦方案 ?? …

9-10關于JS初學產生的問題

1.頁面添加加載完成事件監聽&#xff0c;頁面加載完成后&#xff0c;執行頁面初始化方法/函數; 這是什么意思 這句話描述的是前端開發中一種常見的操作&#xff1a;等待頁面完全加載完成后&#xff0c;再執行特定的初始化代碼。 簡單來說&#xff0c;就是要確保頁面上的所有元素…

項目中遇到pom文件里使用systemPath的例子記錄

項目中遇到pom文件里使用systemPath&#xff0c;很少見&#xff0c;問了下豆包&#xff0c;記錄下結果。在 Maven 的 pom.xml 中&#xff0c;<systemPath> 是 <dependency> 標簽內的一個可選配置&#xff0c;用于手動指定本地系統中某個依賴包&#xff08;通常是 J…

10、向量與矩陣基礎 - 深度學習的數學語言

學習目標:建立向量和矩陣的幾何直觀理解,掌握線性代數的核心概念,培養空間思維能力,為手搓大模型奠定扎實的數學基礎 想象一下,當你使用GPT進行對話時,每個詞匯都被轉換成高維向量,整個對話歷史變成一個巨大的矩陣。模型的"理解"過程,本質上就是在這個高維空…

【Python Tkinter】圖形用戶界面(GUI)開發及打包EXE指南

【Python Tkinter】圖形用戶界面&#xff08;GUI&#xff09;開發及打包EXE指南一、關于 Python Tkinter二、密碼生成器示例2.1 使用Python添加圖形用戶界面&#xff08;GUI&#xff09;2.2 使用工具PyInstaller將應用打包成exe文件三、總結一、關于 Python Tkinter Python Tk…

【設計模式】【觀察者模式】實例

一對多的統一監聽 —— 這就是 觀察者模式&#xff08;Observer Pattern&#xff09; 的經典應用場景。也就是說&#xff1a;一個事件源&#xff08;Subject&#xff09; → 可以注冊多個監聽器&#xff08;Observers&#xff09;&#xff1b;當事件發生時&#xff0c;一次性通…

C#測試調用OpenXml操作word文檔的基本用法

OpenXML SDK是微軟為高效處理Office文檔&#xff08;如Word、Excel&#xff09;而開發的開源.NET庫,它直接操作文檔內部的XML結構&#xff0c;無需安裝Office軟件即可實現文檔的創建、讀取和編輯,常用于服務器端批量生成報表、自動化文檔處理等場景&#xff0c;輕量且跨平臺。本…

照度傳感器考慮筆記

您好&#xff01;很高興為您解答關于照度計傳感器和設計的問題。這是一個非常專業且實際的話題。 一、照度計常用的照度傳感器類型 照度計的核心是光電探測器&#xff0c;其工作原理是將光信號轉換為電信號。目前主流的照度傳感器都屬于硅光電二極管&#xff08;Si Photodiode&…

C# Web API Mapster基本使用

安裝包&#xff1a;Mapster1.注冊MyRegister.Scan(); // 全局配置 //builder.Services.AddMapster(); // 需要安裝Mapster.DependencyInjection包 builder.Services.AddScoped<IMapper,Mapper>();2.配置&#xff08;可不進行配置直接使用也行&#xff09;public class My…

<數據集>無人機航拍人員搜救識別數據集<目標檢測>

數據集下載鏈接https://download.csdn.net/download/qq_53332949/91899456數據集格式&#xff1a;VOCYOLO格式 圖片數量&#xff1a;5755張 標注數量(xml文件個數)&#xff1a;5755 標注數量(txt文件個數)&#xff1a;5755 標注類別數&#xff1a;1 標注類別名稱&#xff…