在多核处理器中,Windows应用程序运行许多线程。这些线程默认情况下会在多个核心上运行吗?也就是每个线程可能在独立的核心上运行。
编辑:
如果我的应用程序运行多个线程,所有这些线程将在一个进程中运行。
没有并行编程...
这个进程能够分割并在多个核心上运行吗?
我的应用程序能从多核处理中受益吗?
在多核处理器中,Windows应用程序运行许多线程。这些线程默认情况下会在多个核心上运行吗?也就是每个线程可能在独立的核心上运行。
编辑:
如果我的应用程序运行多个线程,所有这些线程将在一个进程中运行。
没有并行编程...
这个进程能够分割并在多个核心上运行吗?
我的应用程序能从多核处理中受益吗?
您的问题相当不清楚。我希望我回答了您的问题,但如果您能澄清问题,那将有所帮助。
线程调度由操作系统决定。保持线程在同一核心上具有优势,例如缓存一致性等方面,但是强制其在同一核心上运行通常过于严格限制。
简而言之:是的,线程可以在不同的核心上运行。当然不能同时运行 - 它只有一个执行线程 - 但它可以在T0时间在C0核心上执行,然后在T1时间在C1核心上执行。
编辑:您提到应用程序运行多个线程,但“没有并行编程” - 这是自相矛盾的。如果您使用许多线程,则正在使用并行编程,并且默认情况下这些线程可以在多个核心上运行。如果您只使用一个线程,则除了其他进程可以使用其他核心之外,您将不会从多个核心中获得任何好处。
当你启动多个线程时,它们可能会运行在不同的CPU核心上,也可能不会。
如果你真的有必要,可以使用Thread类的SetProcessorAffinity方法来强制线程在特定的CPU核心上运行。但是,除非你知道自己为什么需要这样做,否则真的不应该这样做。
调度线程由操作系统负责。
要充分利用多个CPU核心,网上有很多教程和知识文章,以下是一些技巧:
人们似乎忘记了一个单个核心包含多个ALU,并且尽管人类生成线性编程代码,但实际上可以同时执行多个指令,甚至不考虑管道。基本上,CPU制造商需要找到一种方法,将多个核心合成一个伪核心,而不仅仅是相反的情况。
这个API的设计目的是使多核并行编程比以前更容易。