2017-01-18 6 views
2

У меня есть несколько потоков прослушивателей, читающих поток сообщений (Kafka). Каждое сообщение имеет идентификатор. Потребители/поток гарантируют по крайней мере один раз потребление. В большинстве случаев поток обеспечивал сообщение ровно один раз. Количество ожидаемых сообщений известно заранее. Когда все сообщения получены, я хочу отключить все потоки прослушивателя. Количество сообщений может составлять не более 50 миллионов. Какая структура данных наиболее подходит для этого?Подсчитайте отдельные элементы из потока с одновременным чтением

Я думал об использовании std::set, std::map и используя mutex при каждой вставке нити. Может ли один поток быть быстрее в таком случае? Есть ли что-то более оптимальное?

+0

Кольцо буфера, ИМО. –

ответ

3

std::unordered_map было бы лучше. Но вы должны рассмотреть возможность использования чего-то вроде HyperLogLog

Смежные вопросы