потенциальные узкие места в параллельности Java - PullRequest
0 голосов
/ 14 февраля 2012

Я работал над реализацией мысли, сложной вещи.Я пытался улучшить производительность, используя распараллеленные потоки, но только выиграл.Я удалил из программы все такие индикаторы, как synchronized и volatile.

Я использую утилиты java.util.concurrent и разделил данные на отдельные массивы для потоков.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Самое полезное, что вы можете сделать, это убедиться, что ваш поток выполняет длинные последовательности независимой работы.Эти последовательности должны быть значительно длиннее, чем издержки, которые вы, вероятно, понесете (скажем, 1 - 10 микросекунд)

Распространенная ошибка - слишком мелкое разбиение работы (создавая много накладных расходов в процессе).Вам нужно только одно задание на ядро, чтобы каждое ядро ​​было занято.

Без большей информации о том, что вы пытаетесь сделать, и о том, как вы разбиваете свою работу, трудно предложить что-то более конкретное.

2 голосов
/ 14 февраля 2012
  • Потенциальным узким местом является создание новых тем. Если это часто случается, вы должны рассмотреть возможность использования пула потоков.
  • Еще одним узким местом может быть размещение массивов в часто вызываемых методах.

Вы можете запустить приложение с помощью JProfiler , чтобы обнаружить фактические узкие места. JProfiler будет обрабатывать ваш байт-код во время загрузки и предлагает вам глубоко заглянуть в ваше приложение с точки зрения потребления памяти, производительности во время выполнения и т. Д.

0 голосов
/ 14 февраля 2012

Вы можете посмотреть на Disruptor , даже если только прочитать их Технический документ, в котором подробно рассматривается предмет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...