gpt4 book ai didi

java - object.wait 和 Thread.sleep() 的 CPU 周期

转载 作者:行者123 更新时间:2023-11-29 04:28:51 25 4
gpt4 key购买 nike

Wait 和 sleep 的 CPU 周期行为有何不同。根据线程生命周期图可以清楚地看到,如果调用 Thread.sleep() 或 object.wait,运行中的线程将被插入阻塞状态,在此阻塞状态期间不会使用 CPU 周期。

如果我是正确的,那么为什么没有人在 Difference between wait() and sleep()

如有错误请指正

此外,根据我的理解,当调用 Thread.sleep(t) 时,在时间 t 之后,会生成中断信号以在下一个 cpu 周期考虑此任务。在 object.wait() 的情况下会发生什么?是否也为 object.wait() 生成中断?

最佳答案

If I am correct then why not any body mentioned this in Difference between wait() and sleep()

(你是对的。)

  1. 因为这在两种情况下都是一样的,所以没有区别。您链接的问答是关于 sleepwait 之间的区别

  2. 大概是因为您阅读的特定答案的作者认为这与他们所说的内容无关。或者因为他们认为这是显而易见的。

Also,As per my understanding when Thread.sleep(t) is called,after time t,interrupt signal is generated to consider this task also for next cpu cycle.what happens in case of object.wait()? does interrupt is also generated for object.wait()?

我假设您在这里谈论的是硬件中断,因为不涉及 Java 中断。

答案是它比您想象的要复杂得多。用于终止 Java sleep 和定时 wait 调用的计时器可能会也可能不会使用硬件中断来实现。那是特定于操作系统的。但如果它们是,我会期望操作系统以相同的方式实现它们。 (因为功能要求非常相似)。

广泛的画笔实现是这样的:

  1. Java 通过 native 代码进行系统调用。系统调用请求:

    • 在 N 毫秒后叫醒我,或者
    • 收到通知时或 N 毫秒后叫醒我
  2. 操作系统安排 N 毫秒时间的“唤醒”
  3. 操作系统将 native 线程标记为阻塞
  4. 大约 N 毫秒后,操作系统计时器(或其他)解除对 native 线程的阻塞;即它变得可运行
  5. 操作系统线程调度程序会立即或稍后将其调度到一个核心并运行该线程。

    • 为了 sleep ,Java 线程刚刚运行
    • 对于定时等待,Java 运行时要么生成并抛出一个 InterruptedException,要么尝试重新获取互斥锁,等等。后者可能会再次阻塞。

操作系统可以通过多种方式实现“N”毫秒后唤醒。一些策略是:

  • 为每次唤醒使用单独的硬件计时器。这无法扩展,因为硬件时间是有限的资源。
  • 对所有唤醒使用单个硬件计时器。实际上,定时器是为 future 最早的唤醒设置的。
  • 将硬件计时器设置为每 C 毫秒触发一次,并考虑在这些时间点唤醒。

如需了解详细信息,您需要下载并阅读 OpenJDK 源代码和操作系统源代码。此外,不同版本的 Java 和不同版本的 OS 的详细信息可能会有所不同。

关于java - object.wait 和 Thread.sleep() 的 CPU 周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741814/

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