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

问题描述 投票:0回答:1

我正试图了解有关其调度和线程相似性的Java内部原理。

问题是:

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

while(true) Thread.sleep(1000);

1)此操作是否总是在同一物理线程上运行?

2)有某种亲和力吗?

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

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

java multithreading cpu affinity
1个回答
1
投票

(非常感谢)JVM不负责安排线程时间,因为Java线程与本地线程是同构的(即1:1)。因此,操作系统计划Java线程运行的时间,并且操作系统管理线程的亲和力(并且如果您希望以任何方式影响它,则必须使用本机代码)。至少有one library提供了这种机制,但我从未使用过。

我很感谢地说,因为很早以前,JVM使用green threads并对其进行协作管理。对于多个cpus /内核,它的速度要慢得多。

© www.soinside.com 2019 - 2024. All rights reserved.