.NET 多線程

  • 多線程

     在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程處理一個常見的例子就是用戶界面。利用線程,用戶可按下一個按鈕,然後程序會立即作出響應,而不是讓用戶等待程序完成了當前任務以後纔開始響應。

  • 基礎概念
    • 進程
     進程是應用程序的實例要使用的資源的一個集合。每個應用程序都在各自的進程中運行來確保應用程序不受其他應用程序的影響,如果一個應用程序失敗了, 只會影響自己的進程,其他進程中的應用程序可以繼續運行。進程是操作系統爲我們提供的一種保護應用程序的一種機制。
    • 線程
     線程是進程中基本執行單元, 一個進程中可以包含多個線程,在進程入口執行的第一個線程是一個進程的主線程,在.Net應用程序中,都是以Main()方法作爲程序的入口的, 所以在程序運行過程中調用這個方法時,系統就會自動創建一個主線程。他們之間的關係簡單說:線程是進程的執行單元,進程是線程的一個容器了。
    • 線程池
     應用程序可以有多個線程,這些線程在休眠狀態中需要耗費大量時間來等待事件發生。其他線程可能進入睡眠狀態,並且僅定期被喚醒以輪循更改或更新狀態信息,然後再次進入休眠狀態。爲了簡化對這些線程的管理,.NET框架爲每個進程提供了一個線程池,一個線程池有若干個等待操作狀態,當一個等待操作完成時,線程池中的輔助線程會執行回調函數。線程池中的線程由系統管理,程序員不需要費力於線程管理,可以集中精力處理應用程序任務。線程池是一種多線程處理形式,處理過程中將任務添加到隊列,然後在創建線程後自動啓動這些任務。線程池線程都是後臺線程.每個線程都使用默認的堆棧大小,以默認的優先級運行,並處於多線程單元中.如果某個線程在託管代碼中空閒(如正在等待某個事件),則線程池將插入另一個輔助線程來使所有處理器保持繁忙.如果所有線程池線程都始終保持繁忙,但隊列中包含掛起的工作,則線程池將在一段時間後創建另一個輔助線程但線程的數目永遠不會超過最大值.超過最大值的線程可以排隊,但他們要等到其他線程完成後才啓動。
 

  • 優點
  • 用戶體驗更好

  • 缺點
  • 大量線程由於操作系統切換線程而導致性能下降

  • 代碼示例
    • 引用多線程程序集:
using System.Threading;
    • 新建線程實例:
Threadth = null;th = new Thread(new ThreadStart(MethodName));
    • 啓動多線程:
th.Start();
    • 調用方法:
this.Invoke(new Action(this.MethodName));

this
.Invoke(new Action<T>(this.MethodName),parameter);
    • 註銷線程:
if(th.IsAlive)

    {th.Abort();}
    • 當線程運行時禁止調用該線程的方法再次創建新的線程

if(th != null)

if (th.IsAlive)

         return;

 

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