【问题标题】:PLINQ and the logical processorsPLINQ 和逻辑处理器
【发布时间】:2014-02-23 12:55:53
【问题描述】:

我的系统配置是这样的:Intel(R) Core(TM) i7-3820QM CPU @ 2.70GHz, 2694 Mhz, 4 Core(s), 8 Logical Processor(s)

您可能会注意到我的机器有 4 个内核和 8 个逻辑处理器。

如果我要使用 PLINQ 查询来利用并行性,我可以为 WithDegreeOfParallelism 指定 7,以便查询将通过创建一个线程来利用所有逻辑处理器每个逻辑处理器?

【问题讨论】:

    标签: c# .net plinq processors


    【解决方案1】:
    1. 您不必告诉PLINQ 您有多少个逻辑处理器。它已经知道(使用Environment.ProcessorCount),它将相应地优化查询。 WithDegreeOfParallelism 的目的是控制 PLINQ 不知道的内容,例如,如果您的代码主要是 I/O 密集型而不是 CPU 密集型。
    2. 如果你坚持,你可以这样做。
    3. 如果您有 8 个处理器,为什么要将其限制为 7 个?

    【讨论】:

    • 回答你的第三个问题,不管是 7 还是 8。如果其他应用会饿死,我只留下一个。
    • @wonderfulworld 没有必要这样做。您的线程有一个运行时间片,操作系统担心饥饿。你应该尽可能多地使用它给你的资源。因此,如果您的代码是 CPU 密集型的,请将其保留为 8(PLINQ 中的默认值),如果它是 IO 密集型的,那么您可能需要更高的数字。
    • 谢谢。我的理解是 CPU 绑定操作需要并行而不是 IO。我错了吗?
    • @wonderfulworld CPU 绑定的操作在添加内核时会变得更快,而 IO 操作大多不会。这意味着您不应该比您的内核执行更多的 CPU 绑定操作,但您可以执行更多的 IO 操作(只要它们是异步的)
    • @I3arnon 并且只要 IO-bound 操作可以利用并行性。例如,如果线程越多,从磁盘读取通常会变慢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多