1. 程式人生 > >C#學習篇之基礎回顧(16)----- 程序和多執行緒

C#學習篇之基礎回顧(16)----- 程序和多執行緒

程序

程序(Process)是Windows系統的一個基本概念。一個應用程式在作業系統中執行被視為一個程序,程序可以包括一個或多個執行緒。 程序之間是相對獨立的,一個程序無法訪問另一個程序的資料(除非使用分散式計算方式),一個程序執行失敗也不會影響另一個程序。

執行緒

執行緒是程序中的基本執行單元,是輕量級程序,也是作業系統分配CPU時間的基本單位。一個程序可以包含多個執行緒,在程序入口執行的第一個執行緒被視為程序的主執行緒。如在C#程式中,都是以Main()方法作為程式入口,呼叫此方法系統就會建立一個主執行緒。

多執行緒

多執行緒可以同時完成多個任務,按照任務優先順序來進行程式效能的優化,如將需要佔用大量時間的任務將時間讓給其他任務。

從巨集觀角度來看,CPU可以實現多執行緒,但是實際上一個CPU在同一時刻只能執行一個執行緒,由於CPU執行速度很快,所以看起來在同一時刻執行了不同操作。當然隨著硬體的發展,現在的電腦都是多核CPU,所以能夠實現同一時刻執行多個執行緒。

執行緒的生命週期開始於System.Threading.Thread類的物件被建立時,結束於執行緒被終止或完成執行時。

在建立執行緒之前首先需要引用System.Threading名稱空間,然後通過擴充套件 Thread 類進行建立,擴充套件的 Thread 類呼叫Start()方法來開始執行緒的執行。建立一個呼叫無引數方法的執行緒如下:

        static void Name()
        {
            Console.WriteLine("這是執行緒");
        }
        static void Main(string[] args)
        {
            Thread thread = new Thread(new ThreadStart(Name));
            thread.Start();
            Console.ReadLine();
        }

執行結果:這是執行緒

如果需要建立一個帶引數方法的執行緒需要修改為ParameterizedThreadStart,ParameterizedThreadStart是一個有參的、返回值為void的委託,且引數必須為Object型別,定義如下:

        static void Name(Object obj)
        {
            Console.WriteLine(obj);
            Console.WriteLine("這是執行緒");
        }
        static void Main(string[] args)
        {
            Thread thread = new Thread(new ParameterizedThreadStart(Name));
            thread.Start("這是引數");
            Console.ReadLine();
        }

執行結果:這是引數

                  這是執行緒

多執行緒測試

        static void OutPutA()
        {
            for (int i = 0; i < 1000; i++)
            {
                Console.Write("A");
            }
        }
        static void OutPutB()
        {
            for(int i=0;i<1000;i++)
            { 
                Console.Write("B");
            }
        }
        static void Main(string[] args)
        {
            Thread thread = new Thread(OutPutA);
            thread.Start();
            Thread thread1 = new Thread(OutPutB);
            thread1.Start();
            Console.ReadLine();
        }

執行結果: