C# PLINQ与逻辑处理器

C# PLINQ与逻辑处理器,c#,.net,plinq,processors,C#,.net,Plinq,Processors,我的系统配置如下:英特尔(R)核心(TM)i7-3820QM CPU@2.70GHz,2694 Mhz,4核,8个逻辑处理器 您可能会注意到,我的机器有4个内核和8个逻辑处理器 如果我要使用PLINQ查询来利用并行性,我是否可以为指定7作为带degreeofparallelism的,这样查询将通过为每个逻辑处理器创建一个线程来利用所有逻辑处理器 您不必告诉PLINQ有多少逻辑处理器。它已经知道(使用Environment.ProcessorCount),并将相应地优化查询。带degreeofpa

我的系统配置如下:英特尔(R)核心(TM)i7-3820QM CPU@2.70GHz,2694 Mhz,4核,8个逻辑处理器

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

如果我要使用PLINQ查询来利用并行性,我是否可以为指定7作为带degreeofparallelism的,这样查询将通过为每个逻辑处理器创建一个线程来利用所有逻辑处理器

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


  • 回答你的第三个问题,7或8不重要。如果其他应用程序都快饿死了,我只留下一个。@wonderfulworld没有必要这么做。你的线程有一个时间片可以运行,操作系统担心饥饿。你应该尽可能多地利用它提供给你的资源。因此,如果您的代码是CPU密集型的,请将其保留为8(PLINQ中的默认值),如果是IO密集型的,则可能需要更高的数字。谢谢。我的理解是CPU绑定的操作需要并行,而不是IO。我错了吗?@wonderfulworld CPU绑定的操作在添加内核时会更快,而IO内核通常不会。这意味着您不应该做比内核更多的CPU绑定操作,但您可以做更多的IO操作(只要它们是异步的)@I3arnon,只要IO绑定操作可以利用并行性。例如,从磁盘读取数据通常会随着线程的增加而变慢。回答第三个问题,7或8并不重要。如果其他应用程序都快饿死了,我只留下一个。@wonderfulworld没有必要这么做。你的线程有一个时间片可以运行,操作系统担心饥饿。你应该尽可能多地利用它提供给你的资源。因此,如果您的代码是CPU密集型的,请将其保留为8(PLINQ中的默认值),如果是IO密集型的,则可能需要更高的数字。谢谢。我的理解是CPU绑定的操作需要并行,而不是IO。我错了吗?@wonderfulworld CPU绑定的操作在添加内核时会更快,而IO内核通常不会。这意味着您不应该做比内核更多的CPU绑定操作,但您可以做更多的IO操作(只要它们是异步的)@I3arnon,只要IO绑定操作可以利用并行性。例如,从磁盘读取数据通常会随着线程的增加而变慢。回答第三个问题,7或8并不重要。如果其他应用程序都快饿死了,我只留下一个。@wonderfulworld没有必要这么做。你的线程有一个时间片可以运行,操作系统担心饥饿。你应该尽可能多地利用它提供给你的资源。因此,如果您的代码是CPU密集型的,请将其保留为8(PLINQ中的默认值),如果是IO密集型的,则可能需要更高的数字。谢谢。我的理解是CPU绑定的操作需要并行,而不是IO。我错了吗?@wonderfulworld CPU绑定的操作在添加内核时会更快,而IO内核通常不会。这意味着您不应该做比内核更多的CPU绑定操作,但您可以做更多的IO操作(只要它们是异步的)@I3arnon,只要IO绑定操作可以利用并行性。例如,从磁盘读取数据通常会随着线程的增加而变慢。回答第三个问题,7或8并不重要。如果其他应用程序都快饿死了,我只留下一个。@wonderfulworld没有必要这么做。你的线程有一个时间片可以运行,操作系统担心饥饿。你应该尽可能多地利用它提供给你的资源。因此,如果您的代码是CPU密集型的,请将其保留为8(PLINQ中的默认值),如果是IO密集型的,则可能需要更高的数字。谢谢。我的理解是CPU绑定的操作需要并行,而不是IO。我错了吗?@wonderfulworld CPU绑定的操作在添加内核时会更快,而IO内核通常不会。这意味着您不应该做比内核更多的CPU限制操作,但是您可以做更多的IO操作(只要它们是异步的)@I3arnon,只要