У меня есть основной поток, который отправляет задания в пул потоков. Я использую инфраструктуру Executor Java.Производительность ExecutorService Java
Из профайлера (VirtualVM) Я вижу активность каждого потока: я вижу, что основной поток ждет много (потому что очередь исполнителя имеет верхний предел), что означает, что очередь исполнителя заполняется большую часть времени. Однако потоки исполнителя не так заняты, как я думал. Большинство из них имеют время ожидания 75%. В virtualVM говорится, что он ждет Монитора.
Может ли кто-нибудь объяснить, почему это происходит? почему бы потоки исполнителей ждать, пока есть еще много возможностей для работы? И как улучшить производительность исполнителя? таким образом, чтобы улучшить производительность в целом? Более подробная информация о ожидании исполнителя на мониторе будет отличной.
Работа, выполняемая рабочими, - это всего лишь некоторые вычисления, которые не зависят ни от чего другого и не сообщаются ни с каким другим потоком (без синхронизации), за исключением того, что в конце они помещают данные в базу данных, используя это собственное соединение.
Это может быть дубликатом: http://stackoverflow.com/questions/7155608/executorservice-slow-multi-thread-performance?rq=1 –
Какую работу вы делаете? Почтовый код из объектов Job. Введите критический код раздела. – Dariusz
Вы уверены, что они ждут работы? Скорее всего, они ждут какой-то другой замок. – Gray