[转].NET 并行编程之Parallel常用语法详解
目录
原文链接:
C#/.NET 并行编程Parallel常用语法详解——CSDN
Parallel用于并行编程,它是在Task的基础上做了封装 。它本身还是同步方法,一直阻塞到内部的并行任务结束才会执行后面的代码。
Parallel.Invoke 主要用于任务的并行#
这个函数的功能和Task有些相似,就是并发执行一系列任务,然后等待所有完成。和Task比起来,省略了Task.WaitAll这一步。它有两种形式:
Parallel.Invoke( params Action[] actions);
Parallel.Invoke (ParallelOptions parallelOptions, params Action[] actions);
/// <summary>
/// 尽可能并行执行多个任务
/// </summary>
public void StartManyTask()
{
Parallel.Invoke(
() => { },
() => { },
() => { });
}
Parallel.For、Parallel.ForEach并行循环迭代运行#
/// <summary>
/// 并行循环迭代运行
/// </summary>
public void CycleStartTask()
{
Parallel.For(0, 5, i => { });
Parallel.ForEach(new string[] { "0", "1", "2", "3", "4" }, i => { });
}
ParallelOptions 可以控制并发数量#
在有更多内核可用的情况下,使用静态的并行度值可能会限制可扩展性。
通常,比较好的做法是将MaxDegreeOfParallelism设置为Environment.ProcessorCount,或者将其设置为通过这个值计算出来的值(Environment.ProcessorCount*2)。
默认情况下,如果没有指定MaxDegreeOfParallelism,则TPL就会允许通过启发式算法提高或降低线程的数目,通常都会高于ProcessorCount,因为这样可以更好地支持CPU和IVO混合型的工作负载。
逻辑内核并不等同于真正的物理内核。默认情况下,TPL通过硬件线程数(即逻辑内核数)而不是物理内核数来优化其执行。
——C#并行编程高级教程:通.NET 4 Parallel Extensions (美)Gaston C.Hillar著
public void LimitThreadCount()
{
int maxCount = 5;
//parallelOptions 可以控制并发数量
ParallelOptions parallelOptions = new ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = maxCount;
Parallel.For(0, 10, parallelOptions, i => { });
}
Parallel常见用法#
#region 全局变量
/// <summary>
/// 任务并行度最大值:运行时的可用逻辑核心数的2倍
/// </summary>
public static int ProcessorCount = Environment.ProcessorCount*2;
/// <summary>
/// 任务并行默认配置:最大并行数为任务并行度最大值(可用逻辑核心数的2倍)
/// </summary>
public static ParallelOptions DefaultOptions = new ParallelOptions() { MaxDegreeOfParallelism = ProcessorCount };
#endregion
#region 方法调用
Parallel.For(0, 10, parallelOptions, i => { });
#endregion
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· Cursor:一个让程序员“失业”的AI代码搭子
· 博客园2025新款「AI繁忙」系列T恤上架
· .NET 阻止Windows关机以及阻止失败的一些原因
· 航天二院校园招聘面试记录:二八三厂