значений, при этом выполняя запись конкурентно
Я сейчас использую map[string]int и перед записью при помощи мьютекса блокирую запись другими. Есть ли более продвинутый контейнер? Жалко терять 50% производительности на этом моменте.
sync.Map еще можешь поискать lockfree hash table
Нет, ничего более продвинутого нет и быть не может
У нее в доке написано, что она не для этого
when multiple goroutines read, write, and overwrite entries for disjoint sets of keys разве нет этот кейс?
так sync.Map тоже на мьютексе. не высок выигрыш я думаю
А что в интах? Зачем вам эта мапа?
Ctrie
А вообще для чего? Есть библиотеки для кеша, которы параллелят. Создают несколько мап и шардируют данные.
Я решил проблему хитростью. Я пишу в канал, и отдельной рутиной оттуда собираю данные и размещаю в мапу пачкой каждые несколько миллисекунд. Бенчмарк: channelTrick=81.65, map=93.53, syncMap=94.34 Могу в ЛС кинуть подробный скрин бенча. Пишите.
eventual consistency 🙂
Обсуждают сегодня