ASP.NET溫故而知新學習系列之ASP.NET中的多線程編程—1-線程機制

       線程概念

  線程是程序執行的基本原子單位,我們上學的時候學過一個分子包括無數個原子,而原子是不能在分割的,原子是最小的單位,一個進程可以由多個線程來組成,解放戰爭中有好多戰役比如淮海戰役,淮海戰役中有很多小的戰鬥組成的,我們可以把戰役看做進程,而戰役中很多小的戰鬥看做線程,從這個角度來看,爲什麼會提高效率呢,把一個進程分成好多線程,把一個戰役分成好多小的戰鬥來組成,讓它們併發異步執行來提高運行的效率,同時兩個戰鬥同時打響,併發執行並不是同時執行(佔用CPU),因爲CPU某個時間段只能運行一個程序的,就是說海海戰役有一個總的指揮司令部,這個總的指揮司令部在一個時間段上只能指揮一場戰鬥的,當同時兩個戰鬥開始的時候,在某個時間點上只能指揮一場戰鬥,但是可以交叉指揮,所以從表面上看這兩場戰鬥是同時打響的,也就是說,一個時間點只能一個線程佔用CPU,只不過它們爭奪CPU(相當於交叉指揮),感覺像同時運行一樣。

  進程舉例

  假設現在有個任務,一個是任務一炸掉敵人的炮兵營,分爲三個步驟的戰鬥才能完成A1:找到炮兵營地圖,B1:潛伏至敵人營地,C1:炸掉炮兵營,任務二是端掉敵人的高地,也分爲三個步驟的戰鬥才能完成A2:找到高地死角,B2:阻擊手潛伏至敵人高地死角,C2:阻擊敵人。假設每一個步驟需要10分鐘。

  如果同步執行的話

  假設這第一個任務和第二個任務都要用到機關槍,那麼當任務一執行的時候,第二個任務需要等待,因爲需要用到機關槍,沒機關槍完成不了的,那麼這兩個任務必須得一個等待了,交給我機關槍我才能進行,兩個任務共需要1個小時,因爲它們需要的是一個資源。

  如果異步執行的話

  假設這第一個任務和第二個任務各自要用到不同的工具,那麼它們不需要彼此的等待,併發執行,只需要30分鐘就能完成。

  所以很明顯第二種異步執行效率更高一些。

  

   什麼時候用線程?

  假設兩個任務都要用到一個資源,比如都要訪問文件,IO輸出,就不要用異步線程執行了,因爲它們會同時搶佔IO資源,會導致整個程序的效率會降低,它們在併發執行的時候會同時爭奪某個資源比如說CPU,在這種情況下,CPU要不斷的執行一些算法到底哪個線程的優先級高會消耗時間的,但是如果使用的資源比較均勻的,一個是使用IO輸出,一個沒有使用IO,就可以使用異步併發執行了,就是同時執行。

  如果兩個任務用到的不是一個資源,可以用異步線程執行。

  我們一邊下載文件,一邊聽音樂看似同時執行,但是實際上一個時間點上CPU只能運行一個任務,但是在大的時間段內看似同時運行一樣。

  使用線程的缺點

  1:因爲要保存每一個線程的上下文信息會使用到內存,會受到內存限制的問題

  2:跟蹤大量的線程將佔用大量的處理器時間 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章