gpt4 book ai didi

c# - 使用多个有限数量的线程处理项目列表

转载 作者:行者123 更新时间:2023-11-30 20:10:22 25 4
gpt4 key购买 nike

基本上,我想在多个线程中处理一个项目列表,而不是一次一个。我只希望一次运行有限数量的线程。这种方法有意义吗?对线程计数使用全局变量是唯一的选择吗? (下面的伪代码)

foreach item in list
while thread_count >= thread_max
sleep
loop
start_thread item
thread_count++
next

function start_thread(item)
do_something_to item
thread_count--
end function

最佳答案

我会为此使用 PLINQ 并指定最大并行度,如下所示:

实际上,我正在更改我对这个问题的回答,因为我意识到您只想直接处理原始列表,而没有进行任何其他过滤或映射(Where/Select)。在这种特殊情况下,最好使用 Parallel::ForEach 并通过 ParallelOptions 指定 MaxDegreeOfParallelism,如下所示:

 int myMaxDegreeOfParallelism = 4; // read this from config maybe

Parallel.ForEach(
list,
new ParallelOptions
{
MaxDegreeOfParallelism = myMaxDegreeOfParallelism
}
item =>
{
// ... your work here ...
});

现在,请记住,当您指定这样的最大值时,您将阻止 PLINQ 使用任何更多资源,即使它们是可用的。因此,如果它在 8 核机器上运行,它永远不会使用超过 4 个核。相反,仅仅因为您指定了 4,并不意味着 4 保证在任何给定时间同时执行。这完全取决于 TPL 用于优化的几种启发式方法。

关于c# - 使用多个有限数量的线程处理项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5174123/

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