1. 程式人生 > >C#程式設計 多執行緒

C#程式設計 多執行緒

一、程序

 程序,是作業系統進行資源排程和分配的基本單位。是由程序控制塊、程式段、資料段三部分組成。程序可以劃分為執行、阻塞、就緒三種狀態,並隨一定條件而相互轉化:就緒--執行,執行--阻塞,阻塞--就緒。

二、執行緒

執行緒(thread),執行緒是CPU排程和執行的最小單位。有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。執行緒自己不擁有系統資源,只擁有一點在執行中必不可少的資源,但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。一個執行緒可以建立和撤消另一個執行緒,同一程序中的多個執行緒之間可以併發執行。由於執行緒之間的相互制約,致使執行緒在執行中呈現出間斷性。執行緒也有就緒、阻塞和執行三種基本狀態。

多執行緒優點:

1、提高應用程式響應。這對圖形介面的程式尤其有意義,當一個操作耗時很長時,整個系統都會等待這個操作,此時程式不會響應鍵盤、滑鼠、選單的操作,而使用多執行緒技術,將耗時長的操作(time consuming)置於一個新的執行緒,可以避免這種尷尬的情況。
2、使多CPU系統更加有效。作業系統會保證當執行緒數不大於CPU數目時,不同的執行緒運行於不同的CPU上。
3、改善程式結構。一個既長又複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨立的執行部分,這樣的程式會利於理解和修改。。

多執行緒儘管優勢明顯,但是執行緒併發衝突、同步以及管理跟蹤,可能給系統帶來很多不確定性,這些必須引起足夠重視。 

多執行緒應用場合:

  1. 完成同類操作的任務,提高併發行。

  2.一個任務,有多個獨立操作的子任務。

三。Thread

常用方法:

   

Start()

導致作業系統將當前例項的狀態更改為 ThreadState.Running。

一旦執行緒處於 ThreadState.Running 狀態,作業系統就可以安排其執行。 執行緒從方法的第一行(由提供給執行緒建構函式的 ThreadStart 或 ParameterizedThreadStart 委託表示)開始執行。執行緒一旦終止,它就無法通過再次呼叫 Start 來重新啟動。

Thread.Sleep()

呼叫 Thread.Sleep 方法會導致當前執行緒立即阻止,阻止時間的長度等於傳遞給 Thread.Sleep 的毫秒數,這樣,就會將其時間片中剩餘的部分讓與另一個執行緒。 一個執行緒不能針對另一個執行緒呼叫 Thread.Sleep。 

Interrupt()
中斷處於 WaitSleepJoin 執行緒狀態的執行緒。

Suspend和Resume(已過時)
掛起和繼續
在 .NET Framework 2.0 版中,Thread.Suspend 和 Thread.Resume 方法已標記為過時,並將從未來版本中移除。

Abort()
方法用於永久地停止託管執行緒。一旦執行緒被中止,它將無法重新啟動。

Join()
阻塞呼叫執行緒,直到某個執行緒終止時為止。 

ThreadPriority(優先順序)
指定 Thread 的排程優先順序。
ThreadPriority 定義一組執行緒優先順序的所有可能值。執行緒優先順序指定一個執行緒相對於另一個執行緒的相對優先順序。
每個執行緒都有一個分配的優先順序。在執行庫內建立的執行緒最初被分配 Normal 優先順序,而在執行庫外建立的執行緒在進入執行庫時將保留其先前的優先順序。可以通過訪問執行緒的 Priority 屬性來獲取和設定其優先順序。
根據執行緒的優先順序排程執行緒的執行。用於確定執行緒執行順序的排程演算法隨作業系統的不同而不同。作業系統也可以在使用者介面的焦點在前臺和後臺之間移動時動態地調整執行緒的優先順序。
一個執行緒的優先順序不影響該執行緒的狀態;該執行緒的狀態在作業系統可以排程該執行緒之前必須為 Running。

時鐘執行緒

使用 TimerCallback 委託指定希望 Timer 執行的方法。 計時器委託在構造計時器時指定,並且不能更改。 此方法不在建立計時器的執行緒上執行,而是在系統提供的 ThreadPool 執行緒上執行。建立計時器時,可以指定在第一次執行方法之前等待的時間量(截止時間)以及此後的執行期間等待的時間量(時間週期)。 可以使用 Change 方法更改這些值或禁用計時器。