【问题标题】:Is there a way to restrict CPU usage to a percentage during runtime for JVM or Dalvik?有没有办法在运行时为 JVM 或 Dalvik 限制 CPU 使用率?
【发布时间】:2015-07-12 12:49:52
【问题描述】:

我要问的是,是否有办法在运行时限制 JVM 或 Dalvik 中的线程可访问的 CPU 百分比?见例子:

private void functionRunningInsideThread()
{
    // Do something

    // Lower access to CPU cycles

    // Do something else (with access to lower CPU cycles)

    // Remove CPU restrictions

    return;
}

【问题讨论】:

    标签: java android jvm


    【解决方案1】:

    简短的回答:不,没有办法可靠地做到这一点,AFAIK。

    更长的答案:这里(至少)有两个问题:

    1. 在传统的 JVM 中,没有安全的方法让一个线程暂停另一个线程的执行,除非第二个线程正在协作;即它会定期检查是否应该暂停。

    2. 很难监控线程使用的 CPU 时间百分比。理论上,您可以使用ThreadMXBean API 获取线程的总 CPU 使用率。然而:

      • 数量可能不可用,并且
      • 即使是这样,从一个线程的总 CPU 使用率到给定时间段内的百分比使用率也不是直截了当的。

    但是,如果您愿意做一些粗略的准备,您可以让线程使用ThreadMXBean.getCurrentThreadCPUTime 定期检查自己的 CPU 使用情况,并与使用 System.getTimeMillis 测量的经过时间进行比较。如果线程发现它正在使用过多的 CPU,它可以简单地调用Thread.sleep()

    另见:

    【讨论】:

    • 感谢详细的回答。不知道线程分析,所以我在那里学到了一些东西。我想使用它的原因是能够减慢线程执行的速度,以便延迟它直到另一个线程完成不需要使用睡眠或等待。但我知道这将是糟糕的代码并且不可靠。谢谢@Stephen。
    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2011-01-25
    • 2014-02-24
    相关资源
    最近更新 更多