引入多線程的兩大動機
- 避免 UI 假死:Socket 屬特殊 I/O,
connect()、send() 可能阻塞主執行緒,導致介面無回應。
- 提升並發與 CPU 利用率:
- 多核環境:多執行緒並行於不同核心。
- 單核環境:時間片輪轉讓收發、處理邏輯交錯進行,避免單一任務 (如報文處理) 阻塞收發流暢度。
多線程帶來的工程代價
- 同步與互斥複雜度:多執行緒操作同一 Socket (I/O) 必須嚴格保護,否則產生不可預期的資料競爭與損壞。
- 資源開銷:執行緒切換上下文、TCB/Stack 記憶體佔用、管理複雜度上升。
設計原則
「在理解 Socket 內部機制 (緩衝區、地址綁定、協議棧行為) 的基礎上,以最少執行緒完成最高並發目標,並將同步邊界清晰化。」