2013-10-28 8 views
0

Мы работаем над системой n-шин, в которой имеются +10 модулей, и каждый модуль выполняет определенную работу.
Каждый модуль имеет собственный пул потоков и диспетчер потоков.
Вся система работает на JBoss AS, а некоторые модули используют собственные коды (pthread для местных парней)
Все выглядит отлично, за исключением того, что мы недавно обнаружили, что один из модулей работает очень медленно в определенное время (максимальное время) , причина в том, что для модуля есть много работ, я также проверил и реализовал весь поток с этим пулом потоков связанных модулей.
, но в то время как модули работают, другой модуль неактивен или не занят.
ВОПРОС:
Возможно ли, что брать темы из пула потоков a нитки бассейна b и получить обратно заимствованные темы после тяжелой работы ?! Я много работал с ExecutorService, но это не помогло, или, по крайней мере, я не мог понять, как это сделать.
, пожалуйста, помогите, спасибо.Связь ThreadPool

+0

Вы не должны искать другой модуль, если он «работает тяжело», но узнайте, есть ли доступные ядра ЦП. Если есть, просто добавьте потоки в пул потоков «рабочий жесткий», иначе сначала остановите другие модули, пока не появится свободный процессор, иначе купите больше процессоров. –

ответ

2

Количество потоков имеет мало общего с распределением рабочей нагрузки.

Если один из модулей является узким местом, а ваша машина насыщена, вы должны реализовать свои собственные механизмы, которые обеспечат, что этот модуль использует большинство ресурсов в данный момент времени.

Простым способом было бы контролировать количество данных, ожидающих обработки в критическом модуле, и приостанавливать работу других модулей, если оно превышает определенный порог.

Другим способом является реализация очереди приоритетов для всех данных, где приоритеты данных основаны на ее типе и времени, которое оно уже ожидало в очереди.