Sobes.tech
Back to questions
Senior
3

Расскажи про эвакуацию (evacuation) в мапах Go до версии 1.24: для чего нужна и когда происходит?

Companies where asked
VK CloudVK Cloud

Answer from AI

sobes.tech AI

В Go до версии 1.24 при работе с мапами (map) происходила операция, называемая эвакуацией (evacuation), связанная с перераспределением элементов при росте мапы.

Когда мапа увеличивалась (resize), происходило копирование элементов из старого массива бакетов в новый. Эвакуация — это процесс перемещения элементов из старой структуры в новую. Во время этого процесса операции чтения и записи могли работать с обеими структурами, чтобы обеспечить корректность и избежать гонок данных.

Эвакуация нужна для:

  • Обеспечения безопасности при одновременном доступе к мапе во время её расширения.
  • Постепенного переноса элементов, чтобы не делать дорогостоящую операцию копирования сразу.

Она происходит при добавлении новых элементов, когда текущая мапа достигает порога заполнения, и запускается процесс расширения и копирования элементов в новую структуру.

В Go 1.24 и выше механизм переработан для повышения производительности и упрощения внутренней реализации.