单词的关系::“线程”和“核心”

问题描述 投票:0回答:3

程序创建/能够创建的线程数量与 CPU 拥有的数量或核心有任何关系/限制吗?

thread
这个词与
Cores of CPU
有任何关系吗?

multithreading cpu-usage cpu-cores
3个回答
5
投票

计算机只能并行运行 number_of_cores 个线程。如果系统只有一个核心,则一次只有一个线程运行。多任务处理只能通过在很短的时间内连续运行每个线程来“模拟”。

通常操作系统会在内核上任意调度线程。例如,线程的一个量程可以在一个核心上运行,而同一线程的下一个量程可以在另一个核心上运行。这就是为什么当您运行单个 cpu 密集型线程时,您会看到两个核心都很忙。这允许单线程进程根据不同的可用性,通过在多个核心之间分配负载来利用多核系统。

更重要的是,操作系统允许线程“锁定”在一个或多个内核上,因此它仅在指定的内核上运行。这在 Windows 上称为“亲和力掩码”。当今的多核感知软件可以利用这一点,并将某些线程专用于某些核心来优化其工作负载。游戏这样做是为了将人工智能专用于一个核心,例如为另一个核心提供渲染。为了有效地做到这一点,软件必须知道系统有多少个核心,并根据该数量创建和分配线程。 类似的并行编程框架(例如 OpenMP)也会计算内核数量以高效地并行化操作。它们创建与系统上的核心数量一样多的线程,以获得物理并行的最佳性能。

我认为这是核心数量和线程数量之间存在关系的唯一情况。


2
投票
核心数

是能够同时运行的独立处理单元的数量。 程序可以生成的

线程

数量是程序希望彼此并行运行的逻辑执行单元的数量。 通常,程序可以生成的线程数量受到语言运行时和操作系统的内部线程实现的限制。但是,如果生成的线程多于计算机上的核心数量,则并非所有这些线程都可以彼此并行运行。相反,将以某种方式调度线程,以尝试最大化每个线程的运行时间。拥有比核心更多的线程很好,但是一旦所有核心同时运行线程,您不一定会通过引入新线程来获得很大的加速。

在很多情况下,一个程序会有数百个线程,但任何时候只有一小部分线程在运行。其他线程可能正在休眠并等待某些事件发生(用户输入、计时器、网络或磁盘事件等)。这不是问题;由于这些线程没有主动执行任何操作,因此机器不需要为它们分配任何核心,并且可以将其处理能力用于其他线程。


1
投票

© www.soinside.com 2019 - 2024. All rights reserved.