图片中的"CPU"代表的是"core"吗?
Does "CPU" in the picture stands for the "core"?
这张图片显示了 Java 程序如何使用内核线程。
我的困惑是图中的"CPU"是不是代表"core",也就是说如果我的cpu是4核支持4线程,那么我的java线程程序中创建的线程最终可以匹配到这4个核心,每个核心每次只有1个运行线程。更何况cpu是4核支持8线程,是不是每个核每次都会有2个运行线程?
在这张特定的图片中,"CPU" 确实意味着 "core"。不过这张图是简化过的。
常规 CPU 支持 运行每个核心一次 1 个线程。
所有现代 CPU 都有 Hyperthreading,这意味着每个核心 "supports" 一次有 2 个线程。在这个特定意义上,4 个核心可以支持 8 个线程。我将 "supports" 放在引号中,因为实现并不是真正 运行 同时处理 2 个东西——那只是 2 个核心。它所做的是交错 2 个线程,但有 2 组寄存器,因此在 2 个线程之间切换时不必从内存中加载寄存器。
您的图片根本没有考虑超线程,并且有充分的理由 - 它试图向您介绍线程,而不是 CPU 实现。
请注意,如果您有 1、4 或 60,000 个线程,这并不意味着它们会在核心之间平均分配。一个线程可以运行在不同的时间在不同的核上,运行时间(Java)可以为某些线程设置affinity。
这意味着您的所有线程可能 运行 在 1 个核心上,或者每个线程在不同的核心上,或任何其他组合。
这张图片显示了 Java 程序如何使用内核线程。
我的困惑是图中的"CPU"是不是代表"core",也就是说如果我的cpu是4核支持4线程,那么我的java线程程序中创建的线程最终可以匹配到这4个核心,每个核心每次只有1个运行线程。更何况cpu是4核支持8线程,是不是每个核每次都会有2个运行线程?
在这张特定的图片中,"CPU" 确实意味着 "core"。不过这张图是简化过的。
常规 CPU 支持 运行每个核心一次 1 个线程。
所有现代 CPU 都有 Hyperthreading,这意味着每个核心 "supports" 一次有 2 个线程。在这个特定意义上,4 个核心可以支持 8 个线程。我将 "supports" 放在引号中,因为实现并不是真正 运行 同时处理 2 个东西——那只是 2 个核心。它所做的是交错 2 个线程,但有 2 组寄存器,因此在 2 个线程之间切换时不必从内存中加载寄存器。
您的图片根本没有考虑超线程,并且有充分的理由 - 它试图向您介绍线程,而不是 CPU 实现。
请注意,如果您有 1、4 或 60,000 个线程,这并不意味着它们会在核心之间平均分配。一个线程可以运行在不同的时间在不同的核上,运行时间(Java)可以为某些线程设置affinity。
这意味着您的所有线程可能 运行 在 1 个核心上,或者每个线程在不同的核心上,或任何其他组合。