【问题标题】:Thread.yield() in a Hyperthreading CPU超线程 CPU 中的 Thread.yield()
【发布时间】:2012-04-03 13:54:22
【问题描述】:

Thread.yield() 静态方法(在 Java 中)导致当前正在执行的线程对象暂时暂停并允许其他线程执行。

如果有多个线程正在执行(在具有超线程功能的 CPU 中),哪个线程会暂停?

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    那个叫Thread.yield的人...

    【讨论】:

      【解决方案2】:

      您似乎对 HT 有误解,HT 由硬件处理,但需要由操作系统调度线程。如果一个线程让出 CPU,它会立即停止其时间片,并且操作系统将在其位置(或空闲进程)放置一个新线程。其他线程将照常继续。

      【讨论】:

        【解决方案3】:

        从 Java 的角度来看,超线程 CPU 上的线程与运行在不同内核上的线程在性质上没有区别。 (他们只是更慢......)

        但是,您可能误解了yield 的作用。它不保证暂停当前线程。相反,它只是提示线程调度程序现在运行不同的线程。

        • 如果没有其他可运行的线程,那么调度器将立即继续刚刚产生的线程。

        • 调度程序可能决定忽略提示。

        如果您希望/需要当前线程真正暂停,请调用sleep 或阻塞等待某个事件发生。

        【讨论】:

          猜你喜欢
          • 2015-07-01
          • 2018-06-09
          • 1970-01-01
          • 2011-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多