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