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

多線程入門系列(一):線程核心概念與基礎認知

     編輯:關於C#

前言

初次接觸「線程」概念時覺得深奧難懂,閱讀多本書、花費長時間才領悟真諦。本系列以初學者心態,完整展示線程相關基礎概念,語言精煉,部分需反覆閱讀。

什麼是線程

  • 進程:資源分配單位(記憶體空間、檔案控制代碼、安全上下文)。
  • 線程:CPU 排程執行單位,隸屬於進程。一個進程至少有一個線程(主線程)。
  • 共享:同進程內線程共享進程資源(堆積、全域變數、檔案控制代碼)。
  • 私有:每個線程擁有獨立的堆疊、暫存器狀態、執行緒區域儲存 (TLS)、程式計數器。

為什麼需要多線程

多線程核心挑戰

  1. 同步:共享資料存取協調(鎖、訊號量、事件)。
  2. 死鎖:循環等待導致永久阻塞。
  3. 競爭條件:執行順序影響結果。
  4. 記憶體可見性:編譯器/CPU 最佳化導致跨線程讀取舊值。
  5. 上下文切換開銷:過多線程反而降低效能。

線程 vs 非同步

  • 線程:併發執行單位,佔用系統資源(堆疊 ~1MB)、上下文切換成本高。
  • 非同步:不阻塞呼叫線程的程式設計模式,async/await、Task、I/O 完成埠 (IOCP) 實現,少量線程處理大量並發 I/O。
  • 原則:I/O 密集用非同步,CPU 密集用多線程/Task.Run。

現代 .NET 多線程發展脈絡

Thread (1.0) 
    → ThreadPool (1.0) 
    → BackgroundWorker (2.0) 
    → Task/TPL (4.0) 
    → async/await (4.5) 
    → ValueTask/Channels/Pipelines (Core 2.1+)

建議新專案優先使用 Task/async/await,直接操作 Thread 僅用於特殊需求(如專用線程、TLS、優先級控制)。

圖示說明

(原文包含兩張圖片,展示進程與線程關係、多線程記憶體模型)

進程與線程關係圖多線程共享/私有記憶體模型
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
原因說明
回應性UI 線程不被長時間運算阻塞
並行處理多核心 CPU 同時執行多項任務
資源利用I/O 等待時切換執行其他工作
簡化模型將複雜非同步邏輯拆分為獨立線程序列