顯示具有 DotNetFramework-執行緒 標籤的文章。 顯示所有文章
顯示具有 DotNetFramework-執行緒 標籤的文章。 顯示所有文章

2015年8月20日 星期四

平行程式設計

之前曾經介紹過如何使用 Thread 或 ThreadPool 建立執行緒,以達到多個工作同步執行的目的。 並利用「同步處理」的機制,以取得非同步作業的執行結果。 自 .NET 4.0 開始,在 System.Threading.Tasks 命名空間中,已提供幾個相關的 Task 類別,可以用來簡化撰寫並行作業的程式碼。 這一組相關的類別庫就稱為「工作平行程式庫」( ,TPL),它簡化了撰寫平行作業的許多細節,讓開發人員可以更專注於程式所應完成的工作。

2012年2月1日 星期三

多執行緒

簡單講,執行緒就是要讓程式有並行處理的能力,也就是希望同一時間可以執行多項作業。 對 Windows 應用程式而言,讓耗費時間的工作在幕後執行,可以讓 UI 仍能保持回應能力。 對伺服器應用程式而言,多執行緒處理可讓不同的執行緒去處理每個接收到的請求。否則,在先前的請求完全得到滿足之前,每個新的請求都不會獲得服務。

幾底幾個項目,都是.NET 中用以提供達到這樣的功能的類別物件。

不管使用以上哪一種方式,只要是並行作業的處理,你都必須將所要執行的程式碼用一個函式包起來,而且這個函式必須是無回傳值的函式。 而所謂的非同步作業模型,指的就是在另一個執行緒中去執行該函式,這樣主程式就可以繼續下一行程式,不用一直等到函式結束。 若主程序有參數要傳遞給它,也只能使用一個 Object 型別的參數。 例如:。

void DoWork()
{
    //ToDo..
}

void DoWork_Para(Object state)
{
    //ToDo..
}

資料同步問題

同步處理機制是設計 Multi-Thread 時必須特別注意的工作,主要的目的是要限制,當兩個或多個執行緒需要同時存取同一個共用資源時,一次只能有一個執行緒可以使用該資源。 為了避免其他執行緒同時存取,該資源將被獨佔鎖定,這樣的機制就稱為「同步處理機制」。 針對單一簡單的變數運算或者區塊的程式,.NET提供了多種不同的機制以達到同步鎖定( Synchronization Locks )的目的。

非同步程式設計

非同步作業通常是用來執行可能需要很長時間才會完成的工作,例如,開啟大型檔案、連接到遠端電腦或查詢資料庫。 要設計非同步作業,除了自行利用 Thread 物件增加執行管道外,在 .NET 中已提供幾種設計模式來快速達到非同步作業的目的。