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

anonuser01

的输出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个软件线程同时运行?

迪米特罗·穆卡洛夫(Dmytro Mukalov)

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

附带说明一下,硬件线程或逻辑CPU不是逻辑软件线程,但是CPU内核可以通过超线程同时执行的执行流数量也是如此,因此它们还提供了并行性,但有一些限制(在您的情况下,每个内核都有单逻辑CPU,因此没有超线程)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章