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