gpt4 book ai didi

c# - Parallel.ForEach - 它在单核机器上运行在哪里?

转载 作者:IT王子 更新时间:2023-10-29 04:49:32 26 4
gpt4 key购买 nike

我了解到新的 TPL (任务并行库)已实现 Parallel.ForEach这样它就可以与“表达的并行性”一起工作。这意味着它不保证您的委托(delegate)将在多个线程中运行,而是检查主机平台是否有多个内核,如果是,则它只会在内核之间分配工作(基本上每个内核 1 个线程) .

如果主机系统没有多核(越来越难找到这样的计算机),那么它将像每个循环的“常规”一样按顺序运行您的代码。坦率地说,非常酷的东西。

通常我会做类似下面的事情,将长时间运行的操作放在 ThreadPool 的后台线程上:

ThreadPool.QueueUserWorkItem(new WaitCallback(targetMethod), new Object2PassIn() );

在主机只有一个内核的情况下,TPL 的 Parallel.ForEach 会自动将调用置于后台线程上吗?或者,我是否应该从后台线程手动调用任何 TPL 调用,以便如果我从单核计算机执行,至少该逻辑将脱离 GUI 的调度线程?

我担心的是,如果我让 TPL 负责所有这一切,我想确保它是否确定它是一个单一的核心框,它仍然将 Parallel.ForEach 循环内的代码编码到一个后台线程,就像我会做的那样,不会阻塞我的 GUI。

最佳答案

你的假设不正确。
Parallel.For 始终是阻塞调用。

即使计算机有多个内核,它仍然会等待所有线程完成后再返回。

如果您不想卡住 UI,您将始终需要显式调用 ThreadPool。

关于c# - Parallel.ForEach - 它在单核机器上运行在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4600248/

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