Java 调度程序线程切换

Java Scheduler Thread Switching

我在某处读到,在 Java 调度程序中,线程切换发生在执行一定数量的指令之后,而不是在特定时间之后(就像操作系统中使用的调度程序)。但是参考文献丢失了。我想知道这是否正确。

Java 曾经有一个叫做 GreenThreads 的特性,它在 1.3 中被移除了。出于所有实际目的,我们可以假设线程调度直接受底层操作系统的 process/thread 调度策略影响。在这种情况下,开发人员需要假设线程是 executed/scheduled 随机的,并且应该 code/treat 它们本身。

在 Linux 上,Java 线程的调度是使用完全公平调度程序 (CFS) 完成的。对于每个 CPU 都有一个 运行-queue,默认情况下有 24 ms,其中单个 运行 队列上的所有线程都应该有机会 运行。所以如果有 2 个线程,每个线程得到 12 毫秒,如果有 3 个任务,每个线程得到 8 毫秒。

当任务有不同的优先级时,事情就会发生。并且还有一个最小粒度来防止减少许多线程的上下文切换开销 运行ning.