gpt4 book ai didi

c# - 运行时更改 Parallel.ForEach MaxDegreeOfParallelism?

转载 作者:行者123 更新时间:2023-12-03 12:47:18 25 4
gpt4 key购买 nike

假设我有一个 Parallel.ForEach 在我的代码中运行,ParallelOption MaxDegreeOfParallelism 设置为 Utils.Threads( ) 像这样:

Parallel.ForEach(linesList, new ParallelOptions { MaxDegreeOfParallelism = Utils.Threads() }, line => ...

现在假设 Utils.Threads() 返回一个 1 到 10 之间的随机整数。

MaxDegreeOfParallelism 会在我的 Parallel.ForEach 运行时改变,还是会设置为第一个 Utils.Threads() 调用一直?提前致谢。

最佳答案

Will the MaxDegreeOfParallelism change while my Parallel.ForEach is running, or will it be set to the first Utils.Threads() call for all the time ? Thanks in advance.

不,它不会,因为它不会不断检查和修改分配的值,而这在 API 初始化期间是必需的。事实上,如果您查看 MaxDegreeOfParallelism 的签名,

public int MaxDegreeOfParallelism { get; set; }

因为它是值类型而不是引用类型,它是整数,所以在任何情况下,值都是被复制的,它永远不会因为值的任何变化而被引用,值类型的标准行为

Impact of MaxDegreeOfParallelism on Parallel.ForEach call

它是一个指示器或提示,它不能确保在执行开始之前从池中提供许多并行线程。对于 Parallel.ForEach,它总是从单线程开始,并根据任务的数量和所花费的时间不断增加并行执行的能力。这个值也是内部调节的,并不是说你可以提供一个非常高的值并期望提供很多线程。它虽然在 PLinq 的情况下表现不同,在处理之前它会期望大多数线程被配置/初始化,但它可能会对性能产生不利影响,如果每个线程都没有足够的工作,由于上下文切换

几个引用链接,关于 C# Parallel/PLinq API 中的 DOP:

When to set the max degree of parallelism

Max Degree of Parallelism for AsParallel()

关于c# - 运行时更改 Parallel.ForEach MaxDegreeOfParallelism?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50195976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com