multi thread 多執行緒程式設計(use c#)
TRANSCRIPT
集英信誠「與大師對談」系列技術論壇
Gelis Wu
Multi-Thread 多執行緒程式設計(Use C#)
Agenda
• Multi-Thread 概念
• 撰寫 Thread
• .NET Framework 多執行緒發展,與非同步程式設計
• Multi-Thread 的同步與鎖定
• Wait Handle
• .NET 2.0 APM(Asynchronous Programming Model)
• Thread Pool 概念
• .NET 4.0 Task Library
• 平行運算簡介
• 實例介紹:Mxic ScheduleJob
Multi-Thread 概念
• 執行緒是作業系統分配處理器時間的基本單元
• 為什麼用 Multi-Thread? 善用多執行緒的技巧,減少因進行長時間動作而使UI凍結的情況
• Win32 的多工概念
• 使用 Multi-Thread 有什麼好處?
• 在 Windows Form 裡使用
Multi-Thread
撰寫 Thread
.NET 1.0 .NET 2.0
撰寫 Thread
.NET 3.0/3.5 .NET 4.0/4.5
• Thread, ThreadStart()
• AsyncCallback, IAsyncResult (非同步應用程式設計)
• Thread Pool, QueueUserWorkItem()
.NET Framework 多執行緒的發展
Multi-Thread 的同步與鎖定
• 有時,我們希望同一個時間只有一個 Thread 存取到某資源 or 變數
• 所以我們需要使用一種機制來等待上一個 Thread 是否執行完畢
• 常用手法:Wait Handle
ManualResetEvent
AutoResetEvent
Mutex
APM (Asynchronous Programming Model)
• 所謂的APM非同步程式設計是以IAsyncResult 將非同步作業設計為兩個方法BeginOperationName 及 EndOperationName
• BeginOperationName 方法會開始非同步作業,並傳回實作IAsyncResult 介面的物件
• IAsyncResult 成員如下:
Thread Pool 概念
• 每個執行緒需要大約1 MB的記憶體
• 為了減輕建立執行緒時所耗費的時間
• 從.NET Framework 2.0 開始,提出了Thread Pooling概念
• 當呼叫QueueUserWorkItem() 函式將 delegate 傳入時,Thread Pool會查看目前是否有閒置的 Thread 於 Pool 中,有的話直接提取出來
.NET 4.0 Task Library
• ThreadPool 需要 Wait Handle來等待Threads結束才做下一件事
• 所謂的Task Library 就是進階版的ThreadPool
• Task Library 提供許多對於Thread Pool中執行緒的控制函式
• 再也不需要自己使用 Wait Handle 來控制執行緒的執行順序
• 也可以讓你設定一個delegate,於執行緒正常結束時觸發
什麼是平行運算?與多執行緒有什麼不同?
• 執行緒是屬於行程(Process)內的東西,如果行程本身不能跨 CPU,那執行緒也無法跨 CPU
• 平行運算 (Parallel Computing) 是指把工作分散到不同的 CPU 去做處理
• 多執行緒的CPU層級的平行技術,目的在榨出CPU最大的運算能量, 使CPU 沒有閒置的時間
• 而平行運算是系統層級的平行技術, 目的在發揮系統中每一顆 CPU 的運算能量
謝謝您的參與及鼓勵期待明年再相逢!!