【发布时间】:2012-11-13 06:34:22
【问题描述】:
任务并行库和 TPL 数据流允许指定最大并行度。该值是上限,而不是保证。实际上,TPL 将根据包括系统资源在内的许多因素确定实际并行度,而不会超过任何程序员指定的最大值。
是否有某种机制来确定 TPL 在某个时间点对并行度所做的选择?
我之所以这么问,是因为我移植了一些相当复杂的代码来使用 TPL Dataflow,而整体吞吐量远低于原始代码。我想看看 TPL 代表我做出了哪些选择,以了解它为什么慢得多。
【问题讨论】:
-
我认为没有内置任何东西,但您应该可以通过添加自己的日志记录来做到这一点。
-
@svick:具体记录什么?我尝试创建一个托管线程 ID 的
HashSet<int>,但发现MaximumDegreeOfParallelism 为 2 的事物最终会随着时间的推移在 5 个不同的线程上运行(无论如何这几乎是我的预期)。 -
您可以在任务开始时增加一个计数器,然后在它完成时减少它。计数器的值将是当前的并行度,例如,您可能对它达到的最高值感兴趣。但它也可能更复杂。
标签: .net task-parallel-library