国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【.NET基礎】--委托、事件、線程(3)

2019-11-14 15:57:23
字體:
來源:轉載
供稿:網友

之前的兩篇文章我們了解了委托和事件,本文我們看一下線程。

1,一個窗體程序,默認擁有一個線程(相當于一個商店里面,只有一個店員),這個默認的線程叫做 UI線程/主線程。

2,進程和線程的關系:

  A,進程,包含程序運行所需要的資源 ,在大多數情況下是指 程序。(商店:囤積要使用的資源的地方)

  B,線程,是在進程中能夠被CPU調用的程序單元,是提供給CPU運行程序的代碼片段。(商店員工:是運行程序的行動者)

  C,一個進程至少一個線程,每一個線程有自己專屬的寄存器(棧指針、程序計數器等)但代碼區是共享的,不同的線程可以執行同樣的函數

  D,同一進程中的多個線程之間可以“并發”執行

3,多線程的目的:

  A,讓CPU主動執行不同的程序單元,這樣就不至于被某個程序的惡意代碼引起死機癥狀

  B,讓計算機“同時”做多個事情,節約時間

  C,CPU在不同的線程里面切換,在不同的進程里面切換

5,線程的調度方式:

  A,非搶占式調度:是指某個線程在運行的過程中不會被操作系統強制性暫停,線程可以一直運行到告一段落或者主動交出運行權。線程的運行完全是單隊列的(像排序買票一樣),這樣可能產生惡意程序長期霸占運行權的情況,而且一旦一個程序死掉了,電腦只能重啟了。

  B,搶占式調度:每個線程有極少的運行時間(在Windows內核模式下這個時間不會超過20ms),當時間用完的時候線程就會被強制暫停,保存上下文并把CPU的運行權交給下一個線程,這樣調度的結果就是所有的線程都在被快速的切換運行,這樣給客戶端的感覺就是線程在“并行同時” 運行。

  C, 線程的調用由CPU決定,所以調用Thread實例的Start方法,標記該線程可以被CPU執行了,但具體執行時間由CPU決定。

6,線程切換的時候保存線程當前的執行狀態,也就是線程當前的執行會話

   線程中的寄存器存在當前執行的代碼號,堆棧存儲當前運行的變量的值。當CPU執行再次回到這個線程的時候讀取之前寄存器和堆棧中保存的數據。

   程序代碼,編譯以后是CPU的指令集,CPU對指定集執行只讀操作。 如下圖:

 

7,如何實現多線程?

  A, 編寫產生線程需要執行的方法

  B,引用System.Threading命名空間

  C,實例化Thread類,并傳入一個指向線程所需要運行方法的委托(線程已經產生,還沒有開始運行)

  D,調用Tread實例的Start方法,標記該線程可以被CPU執行了(具體執行時間由CPU決定)

 /// <summary>        /// 多線程        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        PRivate void btnThread_Click(object sender, EventArgs e)        {            //1,創建線程并通過委托語法糖 傳入方法            Thread thrSon = new Thread(CountDo);            //2,設置為后臺線程            thrSon.IsBackground = true;            //3,啟動線程            thrSon.Start();        }        void CountDo()        {            int i = 0;            while (true)            {                if (i < 999999999)                {                    i++;                }                else                {                    break;                }            }            MessageBox.Show("計算完畢:" + i);        }
View Code

 8,線程到底是什么?

  線程是存儲單元,是存儲在內存中的空間,存儲的是任務列表,要去做什么事情!這些任務交給CPU去做。CPU決定什么時候去做。

  線程是幫助CPU完成搶斷式執行的基礎數據類型,用來存儲CPU每次執行未完成時需要保存的代碼執行信息。(如:正在執行哪個方法?執行到第幾行了?方法里的變量值為什么?)

9,Thread類的一些重要成員

  • Start()啟動線程
  • Abort()終止線程
  • Thread.Sleep(100)靜態方法,可以讓當前線程停止一段時間運行(毫秒)
  • Name線程名
  • Thread.CurrentThread獲得當前線程的引用
  • 前臺線程 和 后臺線程

 10,多線程的消耗

  線程之間切換需要保存當前執行狀態,以及讀取切換前的執行狀態,這個多線程的消耗。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤山县| 沿河| 大丰市| 措美县| 关岭| 博乐市| 海安县| 佛冈县| 恩平市| 沁阳市| 定陶县| 邯郸县| 石柱| 工布江达县| 德惠市| 资溪县| 荆州市| 闽清县| 航空| 聂拉木县| 中西区| 聂荣县| 赣榆县| 绩溪县| 贵州省| 北安市| 茌平县| 金昌市| 莫力| 巩留县| 博乐市| 那曲县| 西畴县| 马尔康县| 威海市| 师宗县| 留坝县| 宜君县| 留坝县| 灵台县| 高阳县|