问题描述
|
我有一个带有数百个线程的系统。大多数线程在给定的时间内处于睡眠或等待状态,但是它们可以随时随地唤醒。我想减少专用于我的系统的OS线程的数量。
您知道一种简单的方法吗?例如,是否有一个线程池程序包,每当线程进入睡眠模式时,它都会存储状态并杀死线程。每当它唤醒时,它将以旧线程的状态启动新线程。
谢谢
解决方法
您是否正在寻找ThreadPoolExecutor之类的东西?
一个执行每个的ExecutorService
使用以下可能之一提交任务
几个池化线程,通常
使用执行器工厂配置
方法。
线程池解决两个不同的问题
问题:他们通常会提供
执行时提高了性能
大量的异步任务,
由于减少了每个任务的调用
开销,它们提供了一种
限制和管理资源,
包括线程,在
执行任务的集合。每
ThreadPoolExecutor还维护一些
基本统计数据,例如数字
完成的任务。
, 您所描述的基本上是什么线程。
现在,您可能知道应用程序逻辑仅取决于几个变量,而不取决于线程堆栈上的所有变量。您只需要这几个变量即可从睡眠中恢复。 VM和OS对此一无所知,也无法为您提供帮助。
您必须自己做。当线程即将退休时,将基本状态包装起来并存储在队列中。然后退出线程,或将其返回到线程池。
当满足特定条件时,从队列中查找状态,基于该队列创建一个新任务,然后在新线程上运行该任务。
, 我的理解是,由于初始化新线程会产生开销,因此最好让线程进入睡眠状态。当线程处于休眠状态时,它不会在CPU上进行调度,因此我想我并没有真正看到问题。