外緒最主要的功能是防止一個耗時過長的任務 block 主緒導致 UI 不能操作且程式看起來像沒有回應。
多緒並不總是比較快,比方多個執行緒存取相同的資源,進行短時間的簡單計算,資源的分配與執行緒的調動成本最終可能比計算更高。
執行緒的使用時機應該是
- 以外緒防止 UI hang 住
- 同時大量獨立的要求
- 需要知道進度
- 耗時長的運算
- 有優先度或順序性的運算
在A緒每完成讀取成績時就可以吐給使用者先看、並同時以B緒運算加權分數並加入排名樹。
前/背景緒
由 new Thread() 建出的緒預設為前景緒,除非強制關閉,否則 Process 會等到所有前景緒結束才關閉。
static void Main(string[] args) { Thread t = new Thread(() => { for (int i = 0; i < 5; i++) { Console.WriteLine(i + 1); Thread.Sleep(1000); } }); // t.IsBackground = true; t.Start(); Console.ReadLine(); }若按下 Enter 觸發 Console.ReadLine() cmd 也不會馬上關閉,而是等到 t 執行完,若 IsBackground = true 則即使 t 未執行完 cmd 也會馬上關閉。
一般我們會用的是背景緒。
Thread Pool
提供已預先建好並納管的背景緒,降低執行緒的建構/回收成本。
一般會從這裡抽而不是自己建;從這抽出的緒完成任務後會回歸,降低反覆建置的成本。
沒有留言:
張貼留言