请描述 C# 中用于并行编程的库,并阐述 Parallel 类的基本用法。
考察说明
考查对 C# 并行编程库的认知以及 Parallel 类实际使用的熟悉程度。
回答思路
- 【回答框架 1】C# 的并行编程库主要指任务并行库(TPL),它建立在 System.Threading 和 System.Threading.Tasks 之上,简化了并行和并发代码的编写。
- 【回答框架 2】Parallel 类是 TPL 中的一个核心静态类,提供了三个主要方法:Parallel.For 用于并行执行固定次数的迭代,Parallel.ForEach 用于并行枚举一个数据源,Parallel.Invoke 用于并行执行多个独立的操作。
- 【回答框架 3】使用这些方法时,CLR 会默认根据系统处理器数量来调整并发度,并自动管理底层线程池中的线程。
- 【回答框架 4】在具体使用上,Parallel.For 可以实现类似 for 循环的并行版本,例如 Parallel.For(0, 100, i => { ... })。Parallel.Invoke 可以并行执行多个 Action 委托,如 Parallel.Invoke(() => DoWork1(), () => DoWork2())。
- 【回答框架 5】注意并行循环中共享变量的访问需要同步,以免产生数据竞争;并行化并非总是带来性能提升,对于非常简单的任务或对顺序有严格要求的场景需谨慎使用。
- 【关键点 1】Parallel 类是 C# 并行编程库中用于数据并行的主要入口。
- 【关键点 2】Parallel 类提供 For、ForEach、Invoke 三种并行方法。
- 【关键点 3】并行循环内共享变量需通过锁或 Interlocked 等方式保证线程安全。
- 【易错点 1】误认为并行循环的迭代顺序与常规 for 循环一致,实际上顺序是未定义的。
- 【易错点 2】在并行循环体内直接使用循环变量并修改其值,可能导致非预期结果。
- 【易错点 3】对所有代码盲目使用并行,忽略任务本身的开销和依赖关系,可能导致性能下降或结果错误。