gpt4 book ai didi

.net - 应用程序如何在多核机器上运行?

转载 作者:行者123 更新时间:2023-12-04 10:05:51 24 4
gpt4 key购买 nike

我试图更好地了解多核处理器的工作原理以及作为程序员我可以如何利用它们。

假设我有一个标准的 .net 控制台应用程序。它不做任何多线程。它仅在其中一个内核上运行吗?如果是这样,它运行在哪个核心上,并且每次都相同?

现在假设我有另一个控制台应用程序可以在内部启动一堆线程。线程是在可用内核之间分配还是全部运行在初始线程所在的同一内核上,而我必须做一些特殊的事情才能使用其他可用内核?

最佳答案

内核、线程、进程和类之间的关系可能很复杂。 当您开始考虑如何安排您可能没有编写的代码(例如 .NET 框架本身)时,更是如此。

简单的答案是,除非您专门编写控制台应用程序以使用多个线程,否则它将在单个内核上运行。

现在,有一些 .NET 框架类在幕后可能使用多个线程,在这种情况下,您的进程可能会使用多个核心。大部分 BCL 不使用线程,而是使用像 WCF 这样的框架。和 WF可以在内部使用线程。

此外,运行时环境可能会使用多个线程(在某些情况下)进行垃圾收集之类的事情。除此之外,运行时环境可能会将您的代码从核心移动到核心。发生这种情况是因为操作系统本身使用抢占式多任务处理来调度线程 - 因此不能保证单个线程与特定内核具有关联性。

对于您问题的第二部分,如果一个进程显式地产生线程,它们通常(但不总是)会在不同的内核上结束。大多数情况下,这些线程将被安排在任何有容量的内核上运行 - 并且线程(正如我之前提到的)可能会从一个内核移动到另一个内核。您不需要做任何特殊的事情(通常)来让多个内核运行您的代码。

实际上,有时更难实现相反的目标:确保特定线程仅在单个内核上运行。这被称为 affinity .在某些情况下,需要将线程关联到特定内核以提高引用的局部性并最小化缓存未命中的可能性。但是,大多数情况下,您无需担心这一点。

如果您有兴趣了解有关 Windows 上并发编程的更多信息 (以及在 .NET 中)我建议你拿起一份 Joe Duffy 的 Concurrent Programming on Windows .

关于.net - 应用程序如何在多核机器上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817041/

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