[转].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编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!