有没有办法在 JVM 或 Dalvik 的运行时限制 CPU 使用百分比?
Is there a way to restrict CPU usage to a percentage during runtime for JVM or Dalvik?
我想问的是,在运行时是否有办法限制 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;
}
简短回答:不,据我所知,没有可靠的方法。
更长的答案:这里(至少)有两个问题:
在传统的JVM中,一个线程暂停另一个线程的执行没有安全的方法,除非第二个线程正在合作;即它会定期检查是否应该暂停。
很难监视线程使用的时间百分比 CPU。理论上,您可以使用 ThreadMXBean
API 获得线程的总 CPU 使用率。然而:
- 可能没有货,
- 即使是,从线程的总 CPU 使用率到给定时间段内的使用百分比也不是简单的。
但是,如果您愿意粗略一点,您可以让线程使用 ThreadMXBean.getCurrentThreadCPUTime
定期检查自己的 CPU 使用情况,并与使用 [=测量的运行时间进行比较=12=]。如果线程发现它正在使用太多 CPU,它可以简单地调用 Thread.sleep()
.
另请参阅:
- Throttling CPU/Memory usage of a Thread in Java?
我想问的是,在运行时是否有办法限制 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;
}
简短回答:不,据我所知,没有可靠的方法。
更长的答案:这里(至少)有两个问题:
在传统的JVM中,一个线程暂停另一个线程的执行没有安全的方法,除非第二个线程正在合作;即它会定期检查是否应该暂停。
很难监视线程使用的时间百分比 CPU。理论上,您可以使用
ThreadMXBean
API 获得线程的总 CPU 使用率。然而:- 可能没有货,
- 即使是,从线程的总 CPU 使用率到给定时间段内的使用百分比也不是简单的。
但是,如果您愿意粗略一点,您可以让线程使用 ThreadMXBean.getCurrentThreadCPUTime
定期检查自己的 CPU 使用情况,并与使用 [=测量的运行时间进行比较=12=]。如果线程发现它正在使用太多 CPU,它可以简单地调用 Thread.sleep()
.
另请参阅:
- Throttling CPU/Memory usage of a Thread in Java?