C#實現多線程的幾種方式

前言

多線程是C#中一個重要的概念,多線程指的是在同一進程中同時運行多個線程的機制。多線程適用於需要提高系統併發性、吞吐量和響應速度的場景,可以充分利用多核處理器和系統資源,提高應用程序的性能和效率。

多線程常用場景

  • CPU 密集型任務.
  • I/O 密集型任務.
  • 併發請求處理.
  • 大數據處理等.

什麼是進程?

進程(Process)是計算機中的一個執行中的程序,它是對正在運行的程序的抽象。一個進程包括了程序的代碼、數據、堆棧以及其他操作系統所需的資源。

什麼是線程?

線程(Thread)是進程中的一個執行單元,一個進程可以包含多個線程,它們共享進程的資源,但擁有獨立的執行流程。

使用 Thread 類

        public static void ThreadMethod()
        {
            var newThread = new Thread(WorkerMethod);
            newThread.Start();

            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"ThreadMethod 主線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }
        
        private static void WorkerMethod()
        {
            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"WorkerMethod 輔助線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }

使用 ThreadPool 類

        public static void ThreadPoolMethod()
        {
            ThreadPool.QueueUserWorkItem(o => WorkerMethod());

            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"ThreadPoolMethod 主線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }
        
        private static void WorkerMethod()
        {
            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"WorkerMethod 輔助線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }

使用 Task 類

        public static void TaskMethod()
        {
            Task.Run(() => WorkerMethod());

            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"TaskMethod 主線程開始工作:{i}");
                Task.Delay(100).Wait();
            }
        }
        
        private static void WorkerMethod()
        {
            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"WorkerMethod 輔助線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }

使用 Parallel 類

        public static void ParallelMethod()
        {
            Parallel.Invoke(WorkerMethod, WorkerMethodOther1, WorkerMethodOther2);
        }
        
        private static void WorkerMethod()
        {
            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"WorkerMethod 輔助線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }

        private static void WorkerMethodOther1()
        {
            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"WorkerMethodOther1 輔助線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }

        private static void WorkerMethodOther2()
        {
            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine($"WorkerMethodOther2 輔助線程開始工作:{i}");
                Thread.Sleep(100);
            }
        }

拾遺補漏合集

在這個快速發展的技術世界中,時常會有一些重要的知識點、信息或細節被忽略或遺漏。《C#/.NET/.NET Core拾遺補漏》專欄我們將探討一些可能被忽略或遺漏的重要知識點、信息或細節,以幫助大家更全面地瞭解這些技術棧的特性和發展方向。

GitHub開源地址

https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetStudy.md

拾遺補漏知識點投稿

該Issues主要是給各位小夥伴們提供投稿的地方,你有什麼想要學習的C#/.NET/.NET Core相關技術棧或者已學習過且有文章輸出的歡迎在投稿!

https://github.com/YSGStudyHards/DotNetGuide/issues/37

DotNetGuide技術社區交流羣

  • DotNetGuide技術社區是一個面向.NET開發者的開源技術社區,旨在爲開發者們提供全面的C#/.NET/.NET Core相關學習資料、技術分享和諮詢、項目框架推薦、求職和招聘資訊、以及解決問題的平臺。
  • 在DotNetGuide技術社區中,開發者們可以分享自己的技術文章、項目經驗、學習心得、遇到的疑難技術問題以及解決方案,並且還有機會結識志同道合的開發者。
  • 我們致力於構建一個積極向上、和諧友善的.NET技術交流平臺。無論您是初學者還是有豐富經驗的開發者,我們都希望能爲您提供更多的價值和成長機會。

歡迎加入DotNetGuide技術社區微信交流羣👨‍👩‍👦

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