使用比CPU多的软件线程=订阅过多?

时间:2019-04-06 01:02:16

标签: multithreading parallel-processing gpu core

lscpu的输出给出(包括部分输出):

CPU(s):                12
On-line CPU(s) list:   0-11
Thread(s) per core:    1
Core(s) per socket:    6
Socket(s):             2
NUMA node(s):          2

我只想确认我的理解是正确的:

(1)我有12个CPU /核。这个数字也是我拥有的硬件线程的数量。

(2)如果(1)为true,并且说我运行的代码使用的软件线程超过12个,则将导致超额订购。假设我使用13个软件线程,是否意味着可以保证我的一个软件线程不能与其他12个线程同时运行?

1 个答案:

答案 0 :(得分:1)

我认为有些术语混乱。我假设您是说并行性,因为并发不是并行性(它是一个更广泛的概念),它意味着多任务处理,系统可以同时执行多个任务。这可以通过纯粹的并行性,抢占式多任务处理或协作式多任务处理来实现,但是它们仅仅是并发形式。从逻辑上讲,多线程执行可以表示为具有任意顺序的细粒度活动的单线程序列,无论我们是在单个内核还是在单个线程上执行所有任务,这仍然会带来并发问题。因此,系统上具有12个硬件线程的所有13个或更多线程将同时运行,但只有12个并行运行。

请注意,硬件线程或逻辑CPU不是逻辑软件线程,但是CPU内核可以通过Hyper-Threading同时执行的执行流数量,因此它们还提供了并行性,但有一些限制(在您但是每个内核都有一个逻辑CPU,因此没有超线程)。