Общепринято, что потоки немного менее эффективны, чем в старой школе с итераторами и / или циклами.Но вряд ли вы получите улучшение на 300% от этого.Вы могли бы получить улучшение на 10 или 20% ... если бы вы преобразовывали обычную память Map
.Для Hazelcast IMap
накладные расходы на использование потоков по сравнению с оптимальным кодом будут незначительными.
(Это можно проверить с помощью профилирования и тщательного тестирования, характерного для вашего приложения.)
Я думаю, вам придется решить эту проблему при проектировании вашей системы или, возможно, с помощью настройки Hazelcast.
Некоторые проблемы с производительностью, с которыми вы сейчас работаете, связаны с IMap
javadoc:
Collection<V> values()
Возвращает клон коллекции значений, содержащихся в этой карте.
Предупреждение: коллекция НЕ поддерживается картой, поэтому изменяется накарта НЕ отражается в коллекции, и наоборот.
Этот метод всегда выполняется распределенным запросом, поэтому он может вызвать QueryResultSizeExceededException, если настроено GroupProperty.QUERY_RESULT_SIZE_LIMIT.
Проблемы:
Когда вы вызываете values()
, реализация IMap
создает копиюзначения карты.Затем вы выполняете потоковую передачу из этой копии, а не непосредственно из IMap
.
Операция values()
выполняет распределенный запрос.Я подозреваю, что это неизбежно.В любом случае, это, вероятно, самая дорогая часть того, что вы делаете.