【问题标题】:Does "CPU" in the picture stands for the "core"?图中的“CPU”代表“核心”吗?
【发布时间】:2020-04-07 17:54:38
【问题描述】:

这张图片显示了 Java 程序如何使用内核线程。 我的疑惑是图片中的“CPU”是不是代表“核心”,也就是说,如果我的cpu有4个核心并且支持4个线程,那么我在程序中创建的java线程最终可以匹配到这4个核心,并且每次在每个核心中只有 1 个正在运行的线程。更何况cpu有4个核心,支持8个线程,是不是每个核心每次都会有2个运行线程呢?

【问题讨论】:

    标签: java multithreading cpu


    【解决方案1】:

    在这张特定的图片中,“CPU”确实意味着“核心”。但是,这张图片被简化了。

    普通 CPU 支持每个内核一次运行 1 个线程。

    所有现代 CPU 都有Hyperthreading,这意味着每个内核一次“支持”2 个线程。在这个特定的意义上,4 个核心可以支持 8 个线程。我将“支持”放在引号中,因为实现并没有真正同时运行 2 个东西 - 那只是 2 个内核。它的作用是交错 2 个线程,但有 2 组寄存器,因此在 2 个线程之间切换时不必从内存中加载寄存器。

    您的图片根本没有考虑超线程,并且有充分的理由 - 它试图教您线程,而不是 CPU 实现。

    请注意,如果您有 1、4 或 60,000 个线程,这并不意味着它们会在内核之间平均分配。一个线程可以在不同的时间在不同的核上运行,运行时(Java)可以为某些线程设置affinity

    这意味着您的所有线程都可能在 1 个核心上运行,或者每个线程在不同的核心上运行,或者任何其他组合。

    【讨论】:

    • 非常感谢先生!我对您的评论只有一个问题,即“我将“支持”放在引号中,因为该实现并没有真正同时运行 2 个东西 - 那只是 2 个核心”这是什么意思?你能帮我更清楚地解释它吗?如果4核可以支持8线程,是否意味着它有可能同时运行8线程?
    • 图片无意描绘复杂现代CPU的实际操作。它使用一种抽象,其中系统具有多个 CPU,并忽略了诸如超线程或多核 CPU 之类的复杂性。如果有帮助,“CPU”表示线程调度程序在其上调度线程的任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2023-03-22
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多