我们正在开发一种n轮胎系统,其中有+10个模块,每个模块都有一定的功能
每个模块都有自己的线程池和线程管理器
整个系统在JBoss AS上运行,一些模块使用本机代码(本地人pthread
)
一切都看起来很完美,除了我们最近发现其中一个模块在某个时间(高峰时间)工作非常慢,原因是因为模块有很多工作,我还检查并实现了整个线程相关模块线程池正在工作
但是当一个模块正在努力工作时,另一个模块有点空闲,或者不那么繁忙
的问题:
是否有可能从线程池a
借用线程到线程池b
并在努力工作之后取回借来的线程?!我和ExecutorService
一起工作很多,但没有帮助,或者至少我不明白该怎么做。
请帮助,谢谢。
答案 0 :(得分:2)
线程数量与工作负载分配几乎没有关系。
如果其中一个模块是瓶颈,并且您的机器已经饱和,则必须实施自己的机制,以确保该模块在给定时间使用最多的资源。
一种简单的方法是监控等待处理关键模块的数据量,并在其超出某个阈值时暂停其他模块的工作。
其他方法是为所有数据实现优先级队列,其中数据的优先级基于其类型和已在队列中等待的时间。