文章出處

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

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. 處理異常

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

 

今天先寫到這里,明天繼續

 


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()