.net 4.0 中的特性总结(五):并行编程

image

1.任务并行库

从 .NET Framework 4 开始,TPL 是编写多线程代码和并行代码的首选方法。 但是,并不是所有代码都适合并行化;例如,如果某个循环在每次迭代时只执行少量工作,或它在很多次迭代时都不运行,那么并行化的开销可能导致代码运行更慢。 此外,像任何多线程代码一样,并行化会增加程序执行的复杂性

2.数据并行

数据并行是指对源集合或数组中的元素同时(即并行)执行相同操作的情况。

System.Threading.Tasks.Parallel 类中 For 和 ForEach 方法的若干重载支持使用强制性语法的数据并行。 在数据并行操作中,将对源集合进行分区,以便多个线程能够同时对不同的片段进行操作。 TPL 支持通过System.Threading.Tasks.Parallel 类实现的数据并行。 此类提供 for 和 foreach 循环(Visual Basic 中为 For 和 For Each)基于方法的并行实现。 为Parallel.For 或 Parallel.ForEach 循环编写循环逻辑与编写顺序循环非常类似。 不必创建线程或队列工作项。 在基本的循环中,不必采用锁。 TPL 将处理所有低级别工作。

image

image

image

image

3.任务并行

顾名思义,任务并行库 (TPL) 基于任务的概念。 术语“任务并行”是指一个或多个独立的任务同时运行。 任务表示异步操作,在某些方面它类似于创建新线程或 ThreadPool 工作项,但抽象级别较高。 任务提供两个主要好处:

系统资源的使用效率更高,可伸缩性更好。

在后台,任务排队到 ThreadPool,ThreadPool 已使用登山等算法进行增强,这些算法能够确定并调整到可最大化吞吐量的线程数。 这会使任务相对轻量,您可以创建很多任务以启用细化并行。 为了补偿这一点,可使用众所周知的工作窃取算法提供负载平衡。

对于线程或工作项,可以使用更多的编程控件。

任务和围绕它们生成的框架提供了一组丰富的 API,这些 API 支持等待、取消、继续、可靠的异常处理、详细状态、自定义计划等功能。

  • 显式创建和运行任务

image

  • 直接创建并启动任务:

image

  • 创建任务集合并输出每个任务的执行结果

image

  • 多任务的串行化

image

  • 创建子任务

image

  • 等待任务执行完成

image

posted @   凌晨三点半  阅读(1151)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示