在這篇文章中,我會總結C#中線程的基礎知識。應該算是比較完全了吧。以后忘記的時候可以回過頭來看看。今年這情況,有點難受,感覺大家都不好過。生活還得繼續啊。
一、托管線程處理基本知識
在過去,CPU只有一個核心,不能同時執行多個計算任務。然而操作系統卻可以同時運行多個應用程序,即實現了多任務的概念。為了防止一個應用程序控制CPU而導致其它應用程序和操作系統本身永遠被掛起這一可能情況,操作系統不得不使用某種方式將物理計算單元分割為一些虛擬的進程,並給予每個執行程序一定量的計算能力。線程正是這一概念的實現,可以認為線程是一個虛擬進程 ,可以獨立運行一個特定的程序。
線程會消耗大量的操作系統資源,多個線程共享一個物理處理器將會導致系統忙於管理這些線程,而無法運行程序。因此,試圖在單核CPU上並行執行計算任務是沒有意義的,因為這比順序運行花費更多的時間。現在基本上已經不會再碰到單核CPU了,當你創建一個線程時,操作系統會自動分配它到哪個核心上去運行。使用多線程可以提高應用程序的響應能力,並利用多處理器或多核系統提高應用程序吞吐量。
進程就是正在執行的程序 。 操作系統使用進程來分隔正在執行的應用程序。 線程是操作系統向其分配處理器時間的基本單元 。 每個線程具有計划優先級,而且維護系統用於保存線程執行暫停時線程上下文的一組結構。 線程上下文包含線程順暢繼續執行所需的全部信息,包括線程的一組 CPU 寄存器和堆棧。 多個線程可在進程上下文中運行。 進程的所有線程共享其虛擬地址空間。 線程可執行任意部分的程序代碼,包括其他線程正在執行的部分。
在這篇文章中,仍然介紹的是傳統線程的使用方法,從.Net Framework4起,推薦使用TPL和PLINQ來創建和使用多線程。TPL和PLINQ依賴System.Thread.ThreadPool線程。
二、創建線程
1 static void Main(string[] args) 2 { 3 Thread t = new Thread(PrintTime); 4 t.Start(); 5 } 6 7 static void PrintTime() 8 { 9 Console.WriteLine(DateTime.Now.ToShortTimeString()); 10 }
正在執行中的程序實例可被稱為一個進程,進程由一個或多個線程組成。這意味着,當程序運行時,始終有一個執行代碼的主線程。
上述的示例代碼創建一個線程來運行PrintTime()方法。