我在 Glassfish 下有一个使用 TIMED_WAIT 的 WorkManager+ThreadPool,比如这个:
p:线程池 1; w: 2018 (TIMED_WAITING):
at java.lang.Object.wait(Native Method)
at com.sun.corba.ee.impl.orbutil.threadpool.WorkQueueImpl.requestWork(WorkQueueImpl.java:171)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528)`
让我们暂时假设线程什么都不做(也就是说,没有添加任何工作)。池中有 100 个线程和池中有 3000 个线程在 CPU 使用率上有区别吗?
我们的测试表明没有,但我想确认一下。
最佳答案
我会说这是特定于操作系统的;我们有数千个线程在我们的 Java 服务器软件中运行在带有 NPTL( native Posix 线程库)的 Linux 服务器上,但大多数线程大部分时间都在“hibernate ”,而且 cpu 使用率从未真正高过,通常在 5-20% 之间(在单个 4 核 cpu 上)。我现在找不到任何引用资料,但我很确定我已经读过 NPTL, hibernate 线程的开销可以忽略不计。
关于java - 如果我在 Java 中的 TIMED_WAIT 中有 3000 个线程,对 CPU 有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9544321/