Что дешевле: обход с использованием n итераторов одного ConcurrentHashMap или n экземпляров HashMap - PullRequest
4 голосов
/ 18 января 2011

Представьте себе сценарий "производитель-потребитель", поток А создает записи, их использует один-много других потоков.

Для этого я передаю несколько записей каждому потоку-потребителю.

Делатьделаю это, я спрашиваю себя, дешевле ли это (первичный в смысле процессинга, вторичный в памяти):

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

или

  • использовать один ConcurrentHashMap и создать Iterator для каждого потока потребителя и после передачи Iterator потоку, очищающему Map - так, чтобы каждый Итератор содержал свое собственное представление нижележащего Map.

Что вы думаете?Возможен ли более или менее общий ответ?
Или он сильно зависит от некоторых переменных, таких как количество записей, потоков и т. Д.
РЕДАКТИРОВАТЬ: Или я должен использовать какой-либо другой тип данныхструктура, которая может лучше решить такие проблемы?

Ответы [ 2 ]

5 голосов
/ 18 января 2011

Параллельный пакет java предоставляет структуру данных именно для этого сценария.

@ see java.util.concurrent.BlockingDeque

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

0 голосов
/ 18 января 2011

Самая дорогая вещь, связанная с процессами, - это конфликт потоков. Похоже, ваш первый подход не вызовет никакой конкуренции - каждый поток будет иметь свою локальную версию Map - за счет более высокого потребления памяти.
Я бы, например, протестировал два сценария для нескольких установок (количество потоков, размеры карты и т. Д.), Которые имеют смысл. Трудно сказать точные цифры без эталона.

...