我已经读到某个地方,在Java调度程序中,线程切换在执行一定量的指令后发生,而不是在一定时间后发生(如操作系统中使用的调度程序)。但参考文献遗失了。我想知道这是否正确。
答案 0 :(得分:4)
Java曾经有一个名为GreenThreads的功能,它已在1.3中删除。出于所有实际目的,我们可以假设线程调度直接受底层操作系统的进程/线程调度策略的影响。在这种情况下,开发人员需要假设线程是随机执行/调度的,并且应该对它们进行编码/处理。
答案 1 :(得分:1)
在 Linux 上,Java 线程的调度是使用完全公平调度程序 (CFS) 完成的。每个 CPU 都有一个运行队列,默认情况下,单运行队列上的所有线程都有机会运行的时间为 24 毫秒。所以如果有 2 个线程,每个线程有 12 毫秒,如果有 3 个任务,每个线程有 8 毫秒。
当任务具有不同的优先级时,事情就发生了。并且还有一个最小粒度来防止减少许多正在运行的线程的上下文切换开销。