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

淺談 .NET 多線程與並行計算(一):前言

     編輯:關於ASP.NET

系列緣起與多線程無處不在

身為 ASP.NET 開發者,平日較少主動寫多線程,但隨 .NET 4.0 即將釋出,並行計算將成主流,故以部落格系列總結 .NET 3.5 多線程並引入 4.0 新平行庫與思維。

其實我們時刻享受多線程紅利:

  • Web 伺服器本身即多線程環境,每請求一線程,單線程無法應對高併發。
  • 資料庫亦為多線程處理查詢。
  • WinForm 常開新線程處理耗時操作避免 UI 凍結。

但傳統「事事開新線程」思維停留在單核時代,多核時代應讓任務真正並行而非「看起來並行」。

進程、線程與時間片輪轉

  • 進程至少含一線程;多線程讓程式「同時」做多事。
  • 單核時代:CPU 以極短時間片輪轉執行多線程,宏觀上似並行。
  • 比喻:雙手畫畫的畫家、一邊打電話一邊聊天(腦力切換上下文有成本)。

多核下的並行優勢與限制

  • 單核下多線程不一定比單線程快(切換開銷),但 I/O 等待時可讓出 CPU 提升吞吐。
  • 多核可真正並行指令,但單一任務若指令間強相依難以拆分並行;多個獨立任務則能充分利用多核。

線程非越多越好

  • 預設每線程 1 MB 堆疊,32 位進程 2 GB 空間理論上限 ~2000 線程,實測 ~1930 即 OOM。
  • Outlook 2007 僅用 50 線程左右,足見一般應用無需大量線程。

多線程編程的三大挑戰

  1. 複雜度:任務分割、資源鎖定、死鎖風險。
  2. 除錯困難:線程間依賴、非確定性執行順序。
  3. 效能不可預測:硬體環境、OS 排程、.NET 執行階段皆影響表現;針對特定環境優化可能在其他環境失效。

本系列預計 30 篇,淺顯介紹 .NET 多線程編程與常見應用模式,冀對諸君有益。

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