介紹
并發和并行是現代編程中的關鍵概念,可幫助開發人員創建高效、響應迅速、高性能的應用程序。在 C# 中,這些概念尤其重要,因為該語言對多線程和異步編程提供了強大的支持。本文介紹了 C# 中的并發和并行,包括關鍵概念、優點和實際示例。
并發
C# 中的并發涉及同時管理多個任務。它允許程序在重疊時間處理多個操作,這對于創建響應式應用程序至關重要。并發是使用多線程和異步編程等技術實現的。
并行性
另一方面,并??行是指同時執行多個任務。這通常是通過將問題劃分為可以并行處理的較小子問題來實現的,從而利用多個 CPU 內核。并行可以顯著提高計算密集型任務的性能。
C# 中并發和并行的關鍵概念
線程
線程是并發編程中的基本執行單元。在 C# 中,可以使用 System.Threading 命名空間創建和管理線程。
異步編程
C# 中的異步編程主要通過 async 和 await 關鍵字支持,它們允許方法異步運行,從而更好地利用系統資源并提高響應能力。
并行編程
System.Threading.Tasks 命名空間支持 C# 中的并行編程,其中包括用于創建和管理并行任務的 Parallel 類和任務并行庫 (TPL)。
示例
讓我們探索一個演示 C# 中的并發性和并行性的示例。我們將創建一個執行兩項任務的簡單程序:讀取文件和執行 CPU 密集型計算。
步驟 1. 設置項目
首先,在您喜歡的開發環境中創建一個新的 C# 控制臺應用程序項目。
步驟 2. 使用異步編程實現并發
我們將首先使用異步編程實現并發,以讀取文件而不阻塞主線程。
using System;
using System.IO;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){Console.WriteLine("Starting file read..."); // 開始讀取文件...// 啟動異步文件讀取操作Task<string> readFileTask = ReadFileAsync("example.txt");// 在讀取文件的同時執行其他操作for (int i = 0; i < 10; i++){Console.WriteLine($"Doing other work... {i}"); // 執行其他工作... {i}await Task.Delay(500); // 模擬其他工作}// 等待文件讀取操作完成string fileContent = await readFileTask;Console.WriteLine($"File content: {fileContent}"); // 文件內容:{fileContent}}static async Task<string> ReadFileAsync(string filePath){using (StreamReader reader = new StreamReader(filePath)){return await reader.ReadToEndAsync(); // 異步讀取文件內容直到結束}}
}
步驟 3. 使用 Parallel 類實現并行
接下來,我們將通過使用 Parallel 類并行執行 CPU 密集型計算來演示并行性。
using System;
using System.Threading.Tasks;class Program
{static void Main(string[] args){Console.WriteLine("Starting parallel computation..."); // 開始并行計算...// 執行并行計算Parallel.For(0, 10, i =>{Console.WriteLine($"Processing index {i} on thread {Task.CurrentId}"); // 在線程 {Task.CurrentId} 上處理索引 {i}// 模擬一個CPU密集型任務PerformComputation(i);});Console.WriteLine("Parallel computation completed."); // 并行計算完成。}static void PerformComputation(int index){// 模擬一個CPU密集型計算double result = 0;for (int i = 0; i < 1_000_000; i++){result += Math.Sqrt(i + index);}Console.WriteLine($"Computation result for index {index}: {result}"); // 索引 {index} 的計算結果:{result}}
}
結論
并發性和并行性是提高應用程序性能和響應能力的強大工具。在 C# 中,這些概念通過異步編程和任務并行庫得到很好的支持。通過利用這些技術,開發人員可以創建高效管理多個任務并有效利用系統資源的應用程序。此處提供的示例演示了在 C# 中實現并發性和并行性的基礎知識,可作為更復雜和可擴展的應用程序的基礎。