java - 如果我在 Java 中的 TIMED_WAIT 中有 3000 个线程,对 CPU 有什么影响?

标签 java multithreading

我在 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/

相关文章:

java - 使用递归删除链表中所有出现的元素

C++ 原子变量可见性

java - 如何在绘图线程中使用Android的Looper

c++ - CPU指令重排序

c++ - std::signal 和 std::raise 线程安全吗?

java - 根据Class Attribute创建HashSet

java - 内存计算器困惑java

c# - 将 for 循环与 if 和 else 结合使用

java - 如何找到自动装箱?

c++ - dll中的QT事件循环