gpt4 book ai didi

Java:循环的 Thread.sleep() 总是在同一个物理核心上运行吗?

转载 作者:行者123 更新时间:2023-12-02 11:01:09 25 4
gpt4 key购买 nike

我正在尝试了解 Java 的调度和线程关联的内部机制。

问题是:

给定一个无限循环,在多核环境中的线程上运行(例如 8):

while(true) Thread.sleep(1000);
  1. 这个操作是否总是在同一个物理线程上运行?

  2. 有某种亲和性吗?

  3. 如果它并不总是在同一个 CPU 上运行,JVM 如何决定将执行实际切换到新的 CPU?

  4. 有什么方法可以验证此行为吗?

最佳答案

幸运的是,JVM 不负责调度线程时间,因为 Java 线程与 native 线程是同构的(即 1:1)。因此,操作系统会安排 Java 线程运行的时间,并且操作系统会管理线程关联性(如果您希望以任何方式影响它,则必须使用 native 代码)。至少有one library提供了这样的机制,但我从来没有使用过。

我说谢天谢地,因为很久以前,JVM使用green threads并对其进行合作管理。对于多个 cpu/核心来说,速度要慢得多。

关于Java:循环的 Thread.sleep() 总是在同一个物理核心上运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60012199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com