程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#多線程基礎

C#多線程基礎

編輯:C#入門知識

    借這次考試系統的機會,學習學習多線程技術,和以往的學習過程相同:在學習新知識之前,先去知道這些知識是什麼、從何而來、用在哪裡、優缺點是什麼,這樣可以為知識建立一個方向,不會學得迷了路。   多線程基礎         基礎                 在說多線程以前,得先了解一下什麼是線程,線程是程序執行的基本單位,一個進程可以由一個或多個線程組成。利用多個線程同時處理的編程理念就是多線程處理,多線程並不是真正多個線程同時占有CPU,任一時刻只能有一個線程占用CPU,只是同時爭奪CPU更頻繁,因為每個線程占用CPU的時間都非常短,宏觀上感覺是同時進行,線程的優先級也並不是讓該進程先執行,而是CPU分配給該線程的時間更多而已。           一般我們使用多線程,是因為多線程處理的效率更高,如果一個進程要完成兩個任務:A為A1→B1→C1,B為A2→B2→C2,同步和異步處理情況如圖:  \                    如果用總長度代表進程所用時間,異步明顯比同步方式花費的時間少,所以在正確使用多線程編程情況下,可以很好的提高應用程序的性能和運行效率。           上下文Context         包括線程執行所需要的所有信息,包括CPU寄存器、堆棧等。           應用程序域         和變量類似,總得需要有個應用范圍的,而應用程序域正是這個作用,應用程序域可以防止因一個程序停止而導致其它程序停止,起到隔離作用,提高了系統的安全和穩定性。           類和命名空間         使用多線程,自然離不開命名空間System.Threading和類Thread。Thread最常用的這幾個函數:           創建線程:   [csharp]    //不帶參數    Thread ts = new Thread(new ThreadStart(ThreadProc));   //帶參數    Thread  SuperMan = new Thread(new ParameterizedThreadStart(RunnerWork));      //不帶參數 Thread ts = new Thread(new ThreadStart(ThreadProc)); //帶參數 Thread  SuperMan = new Thread(new ParameterizedThreadStart(RunnerWork));        終止線程:[csharp] view plaincopyprint? //終止進程    Thread ts = new Thread(new ThreadStart(ThreadProc));   ts.Abort();     //終止進程 Thread ts = new Thread(new ThreadStart(ThreadProc)); ts.Abort();        暫停線程:[csharp] view plaincopyprint? Thread.Sleep(1000);     Thread.Sleep(1000);         線程的掛起和喚醒,因為本身的安全和穩定性隱患,已經成為微軟宣布的過時用法。    什麼時候用多線程?        多線程的主要優點就是效率高、節省時間,所以如果多個線程所需要的系統資源是比較均勻的,這時可以讓它們異步並發執行。       同時多線程也存在多個缺點:不易控制;搶奪資源等。       所以如果多個線程都要搶占某一個資源或某幾個資源,則最好不用異步線程執行。因為並發執行,很可能同時爭奪某個資源,執行資源分配算法都會花費較多時間;創建線程容易但是控制線程比較難,如果使用多線程可能發生致命錯誤,它節省的這點時間我們還是別要了;線程越多,肯定占用的資源越多,這點就會受到內存、CPU等硬件限制,使用多線程還是要考慮這些硬件問題的。       總的來說,多線程就是用空間換時間;至於多少個線程合適?凡事都有度,中庸即可。   顯示多線程數         默認情況下任務管理器是隱藏進程的線程數目的,可以采用以下方法讓線程數可視:           

\

        \

        \

          如圖中,進程Everything的14線程為正在參與運行的線程,與程序中的Thread對象數量無關。             下篇博客會綜合這些基礎內容,寫一關於賽跑的多線程實例。        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved