【问题标题】:ThreadPool communication线程池通信
【发布时间】:2013-11-07 04:57:36
【问题描述】:

我们正在开发一个 n-tire 系统,其中有 +10 个模块可用,每个模块都执行特定的工作。
每个模块都有自己的线程池和线程管理器。
整个系统运行在 JBoss AS 上,部分模块使用原生代码(pthread 本地人)
一切看起来都很完美,除了我们最近发现其中一个模块在某个时间(高峰时间)工作得很慢,原因是因为该模块有很多工作,我也检查并实现了整个线程相关模块线程池正在工作。
但是当一个模块在努力工作时,另一个模块有点空闲,或者不是那么忙。
问题:
有没有可能从线程池a借线程到线程池b,辛苦工作后取回借来的线程?!我与ExecutorService 合作了很多,但它没有帮助,或者至少我不明白该怎么做。
请帮忙,谢谢。

【问题讨论】:

  • 你不应该看另一个模块是否“努力工作”,而是要找出是否有可用的 CPU 内核。如果有,就将线程添加到“努力工作”模块的线程池中,否则,先停止其他模块,直到出现空闲CPU,否则购买更多的CPU。

标签: java c multithreading concurrency pthreads


【解决方案1】:

线程数量与工作负载分配关系不大。

如果其中一个模块是瓶颈,并且您的机器已经饱和,您必须实施自己的机制,以确保该模块在给定时间使用最多的资源。

一种简单的方法是监控关键模块中等待处理的数据量,如果超过某个阈值则暂停其他模块的工作。

另一种方法是为所有数据实现一个优先级队列,其中数据根据其类型和已在队列中等待的时间进行优先级排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2013-02-15
    相关资源
    最近更新 更多