Thread Pool

Thread Pool 是一種 implicit threading 的實作策略,核心想法是: 程式啟動時預先建好一批 worker thread 待命, 有任務進來就從 pool 裡取一個來用,用完放回,不銷毀。

動機

若每次有新任務都呼叫 pthread_create、做完再銷毀, 在低頻情境下沒問題;但當任務頻率很高時(例如 web server 每秒千次 request), 建立和銷毀 thread 的 kernel overhead 本身就會成為瓶頸, 且系統中同時存在的 thread 數量完全不受控制,可能導致資源耗盡。

三個核心優點

Thread Pool 帶來的好處可以從三個層面理解。

速度: 重用已存在的 thread 比每次新建更快, 因為省去了 kernel 分配 stack、初始化 Thread Control Block (TCB) 的固定 overhead。

資源上限: Pool 的大小固定(例如 16 個 worker), 就算有 10000 個 task 湧入,系統中也只有 16 個 thread 在跑, 多餘的 task 排隊等候,讓系統行為可預測。

解耦: Task 的「做什麼」與「怎麼建 thread」的 mechanism 分離。 業務邏輯不需改動就能替換底層的 scheduling 策略, 例如讓 task 改為週期性執行,只需調整 pool 的 scheduling 邏輯即可。

注意事項

Pool 中的每個 worker thread 是一個無限迴圈,不會自己結束。 程式結束前必須顯式 shutdown,通知每個 worker 停止再 join, 否則會造成 thread leak。