介绍
并发和并行是现代编程中的关键概念,可帮助开发人员创建高效、响应迅速、高性能的应用程序。在 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# 中实现并发性和并行性的基础知识,可作为更复杂和可扩展的应用程序的基础。