Классическая задача из игровой симуляции. Нужно отдать фоновым потокам снапшот игрового состояния, чтобы они крутили свою логику, пока основной поток считает тик. Берётся привычный
vector>, на нём строится индекс «локация → сущности», и на маленьких данных всё летает. Потом историческая стратегия доживает до середины партии, объекты плодятся, и внезапно снапшот такой структуры на миллионе локаций начинает стоить дороже, чем вся работа, ради которой его затевали.Скопировать индекс стоит 90 мс, а полезный проход по нему всего 14. То есть работу распараллелили ради 14 миллисекунд и отдали 90 просто за право начать. Стандартные контейнеры тут разоряют на пустом месте, и виноват даже не объём памяти, а то, куда процессор вынужден прыгать за данными.
Посмотрим, как ужать те же данные так, чтобы старт перестал съедать весь выигрыш.
