所以这可能最终会成为一个尴尬的问题,但是对于 Java,线程中的无限循环会导致 CPU 使用率过高吗?我对 Java 中的多线程不是很了解,但我的假设是 Java 为所有线程分配相同的时间,无论线程是否有事情要做。因此,我隐含地假设多线程环境中的无限循环不会像单线程环境中那样对性能造成负担。因此,我有很多代码,如下所示:
public Thread readerThread = new Thread() {
@Override
public void run() {
while(true) {
readNextMessage(); // Does nothing if there are no messages to read
}
}
}
readerThread.start();
我最近开始注意到我的应用程序中存在严重的性能问题,并且我开始怀疑我的线程方法是否是原因。
最佳答案
不可能将时间分配给无事可做的线程。仅当线程准备好运行时才能对其进行调度。因等待某事发生而被阻塞的线程尚未准备好运行。
想象一下,如果您的假设是正确的,并且服务器有 100 个线程,每个客户端一个线程。现在,进一步想象一下,大多数客户都是不活跃的。这意味着每个 Activity 客户端最多只能获得 1/100 的 CPU。那将是非常糟糕的。
无事可做时消耗 CPU 的线程会阻止 CPU 进入休眠状态、浪费电量并降低性能,不仅会降低同一进程中的其他线程的性能,还会降低整个系统的性能。
关于java - 无限循环的线程会导致CPU占用率过高吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62432121/