Выбор ответа Middle sync и атомики обновлено
Что гарантирует sync.Pool
Вопрос
Какое утверждение о sync.Pool верно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Объекты могут пропасть при любом GC, пул годится как кеш буферов. Пул снижает число аллокаций, но не хранит объекты надёжно: при GC содержимое переходит в «жертвенный» кеш и затем удаляется.
Варианты ответа
- Пул гарантирует, что Get вернёт ранее положенный объект
- Пул ограничивает максимальное число объектов размером New
- Объекты нужно возвращать в пул из той же горутины, что взяла
- Объекты могут пропасть при любом GC, пул годится как кеш буферовправильный ответ
Разбор
Пул снижает число аллокаций, но не хранит объекты надёжно: при GC содержимое переходит в «жертвенный» кеш и затем удаляется. Get может вернуть новый объект от New или nil, если New не задан. Лимитов нет. Класть можно из любой горутины, пул потокобезопасен. Перед Put объект обычно сбрасывают (buf.Reset()), а слишком большие буферы не возвращают.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «sync и атомики»
- Глобальный максимум через CompareAndSwap
- Конкурентные переводы между счетами без дедлока
- Шардированная мапа с мьютексом на шард
- Что выведет Go: atomic.Int64 из 100 горутин
- Что выведет Go: sync.Once и OnceValue
- Код-ревью Go: кеш на RWMutex
- Код-ревью Go: ленивый синглтон и горячая перезагрузка конфига
- Типизированные атомики