[转].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 @   二次元攻城狮  阅读(467)  评论(0)    收藏  举报
编辑推荐:
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· 当数据爆炸遇上SQL Server:优化策略全链路解析
· 记录一次线上问题排查:JDK序列化问题
· 微服务之间有哪些调用方式?
阅读排行:
· 运维员工离职交接清单
· W.js ,一个超级小的三维 WebGL 引擎的使用方法
· Python 类不要再写 __init__ 方法了
· 大模型应用开发:利用 Spring-AI 实现高内聚低耦合可扩展的聊天应用
· 个人对Debian桌面系统的简单使用分享
  1. 1 烟花易冷 小柔Channel
  2. 2 红颜如霜 江壹纯
  3. 3 不谓侠 小桃Channel
  4. 4 小小恋歌 新坦结衣
  5. 5 神预言 袁娅维TIARAY
小小恋歌 - 新坦结衣
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示
主题色彩