為何網路程式離不開多執行緒?
- 網路操作頻繁遇到 **阻塞** (等待連線、等待資料、DNS 查詢)
- 單執行緒阻塞導致 UI 凍結、回應遲鈍、錯誤率上升
- 將阻塞操作移至背景執行緒,主執行緒保持 UI 回應,大幅提升使用者體驗與系統吞吐量
執行緒是雙面刃:濫用會造成資源洩漏、競爭條件、程式掛起。若邏輯本身足夠快,**不建議強行引入多執行緒**。
Thread 類別核心建構式
public Thread(ThreadStart start);
ThreadStart:無參數、無回傳值委派,指向執行緒進入點方法
Thread 常用方法表
| 方法 | 說明 |
| Abort() | 請求終止執行緒,拋出 ThreadAbortException |
| Interrupt() | 喚醒處於 WaitSleepJoin 狀態的執行緒 |
| Join() | 阻塞呼叫端直到該執行緒結束 |
| ResetAbort() | 取消目前的 Abort 請求 |
| Resume() | 恢復已 Suspend 的執行緒 (已過時) |
| Sleep(ms) | 當前執行緒休眠指定毫秒 |
| Start() | 將執行緒狀態轉為 Running,開始執行 |
| Suspend() | 掛起執行緒 (已過時,不建議使用) |
Thread 常用屬性表
| 屬性 | 說明 |
| CurrentCulture | 取得/設定執行緒文化特性 |
| CurrentThread | 靜態屬性,取得目前執行緒參考 |
| IsAlive | 執行緒是否仍在執行 |
| IsBackground | 是否為背景執行緒 (主程式結束時自動終止) |
| Name | 執行緒名稱 (除錯用) |
| Priority | 排程優先權 (Lowest ~ Highest) |
| ThreadState | 執行緒狀態旗標組合 |
本系列實驗環境
- Windows 2000 Server
- Visual Studio .NET 2002 RTM / .NET Framework SDK 1.0 (3705)
系列規劃
- Thread API 基礎與動機 (本文)
- 單執行緒掃描器介面與實作
- 單執行緒效能基準測試
- 重構為多執行緒架構 (委派回呼)
- 多執行緒版完整實作與效能驗證
- 總結