【问题标题】:Why we have a core/thread limit on CPU?为什么我们对 CPU 有核心/线程限制?
【发布时间】:2018-04-26 08:30:52
【问题描述】:

在编程多线程环境方面,当我们运行多线程应用程序时,CPU 在线程之间切换。我们可以并行创建和运行数千个线程。

我不明白为什么我们在单个 CPU 上有一个核心/线程限制,它在实际情况下不能并行运行,而是它只是在要运行的线程之间快速切换,那么为什么我们有一个类似 8 核/16 线程的 CPU ?

【问题讨论】:

  • 16 线程“限制”是 CPU 上的并发 线程数。对系统可以拥有的线程数量没有限制,只有在 CPU 上可以同时执行多少。
  • @Someprogrammerdude 这就是我认为的问题。一些答案说 16 个线程实际上并没有同时工作。 “CPU只是在线程之间切换。要同时执行,你需要多CPU”
  • @hellzone 您是否将 CPU 线程与编程/软件多线程混为一谈?
  • 这就是自 1960 年代开始以来多任务处理的实际工作方式:多个执行“线程”由操作系统切换进出。当时和今天的最大区别在于,这种切换可以通过更高的处理器速度更频繁地完成,并且多核(以及可能的“技巧”,如超线程)意味着多个线程可以同时运行。昨天的“多 CPU”系统与今天的多核 CPU 之间的区别在于,不同的物理 CPU 已合并到一个包中。
  • @hellzone 如果您在 16 个软件线程中运行它,那么您可以同时运行它们。但是,CPU 线程与其所属的内核共享许多物理特性,因此在许多情况下,您会发现它比拥有 16 个实际内核或 16 个单核 CPU 慢。 (请注意,一个核心通常只有 2 个线程。)。有一个限制,因为这些是物理实体 - 将它们想象成更像单车道或多车道的道路。

标签: java multithreading cpu cpu-cores


【解决方案1】:

我们打个比方

“我经营一家酒店,客人在房间之间切换。我可以同时接待数百位客人。一个客人离开房间,另一个客人进入。如果房间已满,客人会在大堂等候,但我很快切换它们,让每位客人都有时间待在房间里。

我不明白为什么我的酒店大楼有房间限制。我的意思是我在房间之间快速切换客人,那为什么我的大楼有 8 个房间/16 个床位?”

hotel = CPU
room = CPU core
bed = CPU thread
guest = software thread

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2014-11-17
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多