multi thread 多執行緒程式設計(use c#)

20
集英信誠「與大師對談」系列技術論壇 Gelis Wu Multi-Thread 多執行緒程式設計 (Use C#)

Upload: gelis-wu

Post on 17-Jul-2015

205 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Multi thread 多執行緒程式設計(use c#)

集英信誠「與大師對談」系列技術論壇

Gelis Wu

Multi-Thread 多執行緒程式設計(Use C#)

Page 2: 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

Page 3: Multi thread 多執行緒程式設計(use c#)
Page 4: Multi thread 多執行緒程式設計(use c#)

Multi-Thread 概念

• 執行緒是作業系統分配處理器時間的基本單元

• 為什麼用 Multi-Thread? 善用多執行緒的技巧,減少因進行長時間動作而使UI凍結的情況

• Win32 的多工概念

• 使用 Multi-Thread 有什麼好處?

• 在 Windows Form 裡使用

Multi-Thread

Page 5: Multi thread 多執行緒程式設計(use c#)
Page 6: Multi thread 多執行緒程式設計(use c#)

撰寫 Thread

.NET 1.0 .NET 2.0

Page 7: Multi thread 多執行緒程式設計(use c#)

撰寫 Thread

.NET 3.0/3.5 .NET 4.0/4.5

Page 8: Multi thread 多執行緒程式設計(use c#)
Page 9: Multi thread 多執行緒程式設計(use c#)

• Thread, ThreadStart()

• AsyncCallback, IAsyncResult (非同步應用程式設計)

• Thread Pool, QueueUserWorkItem()

.NET Framework 多執行緒的發展

Page 10: Multi thread 多執行緒程式設計(use c#)
Page 11: Multi thread 多執行緒程式設計(use c#)

Multi-Thread 的同步與鎖定

• 有時,我們希望同一個時間只有一個 Thread 存取到某資源 or 變數

• 所以我們需要使用一種機制來等待上一個 Thread 是否執行完畢

• 常用手法:Wait Handle

ManualResetEvent

AutoResetEvent

Mutex

Page 12: Multi thread 多執行緒程式設計(use c#)
Page 13: Multi thread 多執行緒程式設計(use c#)

APM (Asynchronous Programming Model)

• 所謂的APM非同步程式設計是以IAsyncResult 將非同步作業設計為兩個方法BeginOperationName 及 EndOperationName

• BeginOperationName 方法會開始非同步作業,並傳回實作IAsyncResult 介面的物件

• IAsyncResult 成員如下:

Page 14: Multi thread 多執行緒程式設計(use c#)
Page 15: Multi thread 多執行緒程式設計(use c#)

Thread Pool 概念

• 每個執行緒需要大約1 MB的記憶體

• 為了減輕建立執行緒時所耗費的時間

• 從.NET Framework 2.0 開始,提出了Thread Pooling概念

• 當呼叫QueueUserWorkItem() 函式將 delegate 傳入時,Thread Pool會查看目前是否有閒置的 Thread 於 Pool 中,有的話直接提取出來

Page 16: Multi thread 多執行緒程式設計(use c#)
Page 17: Multi thread 多執行緒程式設計(use c#)

.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#)
Page 19: Multi thread 多執行緒程式設計(use c#)

什麼是平行運算?與多執行緒有什麼不同?

• 執行緒是屬於行程(Process)內的東西,如果行程本身不能跨 CPU,那執行緒也無法跨 CPU

• 平行運算 (Parallel Computing) 是指把工作分散到不同的 CPU 去做處理

• 多執行緒的CPU層級的平行技術,目的在榨出CPU最大的運算能量, 使CPU 沒有閒置的時間

• 而平行運算是系統層級的平行技術, 目的在發揮系統中每一顆 CPU 的運算能量

Page 20: Multi thread 多執行緒程式設計(use c#)

謝謝您的參與及鼓勵期待明年再相逢!!