gpt4 book ai didi

Java线程调度

转载 作者:行者123 更新时间:2023-11-30 06:24:34 25 4
gpt4 key购买 nike

我的笔记说线程调度算法主要有两大类,抢占式和分时式。我想弄清楚这些在 Java 中是如何工作的。

据我了解(如果我有一点小错误,请纠正我!)抢占式允许优先级较高的线程在进入可运行状态时从优先级较低的线程接管 CPU。它会独占 CPU 直到更高优先级的线程出现,还是它会简单地消耗大部分 CPU 时间,但较低优先级的线程也有机会运行?我在这里假设没有调用会放弃 CPU 的方法,例如 yield() 或 sleep()。

在时间共享中,更高优先级的线程是否获得更大份额的 CPU 时间?

我猜我对先发制人的解释(以及我提出的问题)是不正确的,因为它看起来与分时一样!但我想确定细节。

我想,这一切是如何实现的? JVM 或操作系统是否调度线程,或者是否依赖于 JVM 实现?

最佳答案

首先,我怀疑你的笔记不正确,应该是non-preemptive vs time-sharing(也就是所谓的preemptive)。至少,几十年前我参加操作系统类(class)时,故障就是这样发生的,我怀疑它是否已经改变。

抢占式线程(/进程)模型中,每个线程(/进程)都被授予单独使用 CPU 的权利,直到它明确放弃它。这是您在单用户操作系统(例如原始 Windows 或 Macintosh)(以及一系列早于它们的小型计算机系统)中找到的模型。一个正在运行的进程可以明确地 yield() 它对处理器的控制,从而允许另一个线程/进程运行。当然,有很多注意事项,特别是关于中断处理,但我会把描述留在那里。

在抢占式(也称为分时模型)中,操作系统可能会强制线程/进程让出 CPU(即“抢占”它)。这可能发生在任何地方,但在最简单的情况下,操作系统会在时钟的每个滴答声中被调用,并决定哪个进程应该在下一个时钟滴答声中获得 CPU。再次简化,优先级最高的进程开始运行;如果有多个进程具有相同的优先级,则通常由最近最少运行的算法决定。

但是,无论如何,对于所有现代 Java 实现,决定线程何时(以及何处)运行的是操作系统,而不是 JVM。

关于Java线程调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715861/

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