執行緒基礎

小白衝發表於2022-02-09

      執行緒比較重要,最近面試的話幾乎都會問到, 日常中也會用到(不知不覺),到底執行緒是個什麼鬼?結合最近看的幾本書,這裡做一個記錄

1.什麼是程式?執行緒?多執行緒?優點?缺點?

       對於計算機而言,每雙擊一個應用程式,系統都會對此程式分配一個或者多個程式,這一點開啟工作管理員介面(登出)即可明白。如此,程式則可以理解為執行緒的容器,由系統建立,又在具體執行過程中建立了執行緒。而執行緒是程式中的獨立執行單元,對於系統而言,是通過排程執行緒來是應用程式工作。多執行緒可狹義的理解程式中包含有多個單執行緒的執行流。

優點: 由於存在優先順序、等待等機制,這使得多執行緒能提高CPU的利用率,當不需要某個執行緒時,可呼叫等待方法來達到目的

缺點: 執行緒需要佔用記憶體,執行緒越多佔用記憶體也越多; 
           多執行緒需要協調和管理,所以需要CPU時間跟蹤執行緒; 
           執行緒之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題;
           執行緒太多會導致控制成本增加,會增加不可控的的風險

 

2.使用C#建立一個執行緒

        public static void WirteNumber()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            }
        }

        public static void Maintest()
        {
            Thread t = new Thread(WirteNumber);
            t.Start();  //執行執行緒
        }

初看,並不覺有什麼神奇之處,僅僅是多了一個Thread 物件,利用反射可以查到,Thread的建構函式有兩類,一類帶引數,一類不帶引數

如: 不帶引數(ThreadStart 委託) --     t.Start()

        帶引數(ParameterizedThreadStart 委託) --  t.Start(Para)

而對於其他的簡單操作,這裡列表統計下

3.前臺執行緒和後臺執行緒

     在一個程式中,當所有前臺執行緒停止執行後,CLR會強制結束所有仍在執行的後臺程執行緒,這些後臺執行緒會被直接終止,而不會丟擲異常,只有設定了IsBackground屬性為True,Thread類所建立的執行緒才為後臺執行緒,否則為前臺執行緒。

    如果想讓後臺執行緒先執行完,那麼可以使用 join、sleep 方法來實現

 4. 使用 C# 中的 lock 關鍵字

 5. 使用 Monitor 類鎖定資源

     鎖可以用來保護資源,常見的訂票系統,比如客戶每訂一張票,後臺系統的資料庫就減少一張,如果共有1000張,當A使用者下單的時刻,後臺票數(資源)是被鎖起來,即同一時刻只能有一個客戶來下單,這樣後臺出票的順序也是連續的,然後B客戶下單。若多客戶同時下單,後臺票號就不能連貫輸出。具體例子如下:

 

 6. 處理異常

     程式一單執行,就有可能出現異常,優秀的程式碼只是出現異常的可能性較小,如何正確的去捕捉、處理 異常,是程式中必須要考慮的問題。執行緒也不例外。

    上面的內容來自《C#執行緒基礎》這本書,其實說的都是很簡單的基礎內容,看看就好

    真正專案中,會有一些執行緒的綜合應用,包括執行緒池、非同步多執行緒等等。

 

轉載於:https://www.cnblogs.com/Sientuo/p/7264489.html

相關文章