Loading

[转].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
posted @   二次元攻城狮  阅读(479)  评论(0)    收藏  举报
编辑推荐:
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
· 协程本质是函数加状态机——零基础深入浅出 C++20 协程
· 编码之道,道心破碎。
· 记一次 .NET 某发证机系统 崩溃分析
· 微服务架构学习与思考:SOA架构与微服务架构对比分析
阅读排行:
· 历时半年,我将一个大型asp.net的零代码快速开发平台转成了java
· C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码)
· 记一次 .NET 某无语的电商采集系统 CPU爆高分析
· Java团队Cursor最佳实践:3分钟构建「零泄漏」AI开发环境
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
  1. 1 烟花易冷 小柔Channel
  2. 2 红颜如霜 江壹纯
  3. 3 不谓侠 小桃Channel
  4. 4 小小恋歌 新坦结衣
  5. 5 神预言 袁娅维TIARAY
烟花易冷 - 小柔Channel
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示
主题色彩