線程是一個獨立的運行單元,每個進程內部都有多個線程,每個線程都可以各自同時執(zhí)行指令。每個線程都有自己獨立的棧,但是與進程內的其他線程共享內存。但是對于.NET的客戶端程序(Console,WPF,WinForms)是由CLR創(chuàng)建的單線程(主線程,且只創(chuàng)建一個線程)來啟動。在該線程上可以創(chuàng)建其他線程。

圖:
大學生就業(yè)培訓,高中生培訓,在職人員轉行培訓,企業(yè)團訓

線程工作方式

多線程由內部線程調度程序管理,線程調度器通常是CLR委派給操作系統(tǒng)的函數(shù)。線程調度程序確保所有活動線程都被分配到合適的執(zhí)行時間,線程在等待或阻止時 (例如,在一個獨占鎖或用戶輸入) 不會消耗 CPU 時間。
在單處理器計算機上,線程調度程序是執(zhí)行時間切片 — 迅速切換每個活動線程。在 Windows 中, 一個時間片是通常數(shù)十毫秒為單位的區(qū)域 — — 相比來說 線程間相互切換比CPU更消耗資源。在多處理器計算機上,多線程用一種混合的時間切片和真正的并發(fā)性來實現(xiàn),不同的線程會在不同的cpu運行代碼。

創(chuàng)建線程

如:

using System;using System.Threading;class ThreadTest{
  static void Main()
  {
    Thread t = new Thread (Write2);          // 創(chuàng)建線程t    t.Start();                               // 執(zhí)行 Write2()
     // 同時執(zhí)行主線程上的該方法    for (int i = 0; i < 1000; i++) Console.Write ("1");
  }
 
  static void Write2()
  {
    for (int i = 0; i < 1000; i++) Console.Write ("2");
  }
}//輸出://111122221122221212122221212......

在主線程上創(chuàng)建了一個新的線程,該新線程執(zhí)行WrWrite2方法,在調用t.Start()時,主線程并行,輸出“1”。

圖:
大學生就業(yè)培訓,高中生培訓,在職人員轉行培訓,企業(yè)團訓

線程Start()之后,線程的IsAlive屬性就為true,直到該線程結束(當線程傳入的方法結束時,該線程就結束)。


CLR使每個線程都有自己獨立的內存棧,所以每個線程的本地變量都相互獨立。

如:

        		

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式