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