Выбор ответа Middle sync и атомики обновлено

Что гарантирует sync.Pool

Вопрос

Какое утверждение о sync.Pool верно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Объекты могут пропасть при любом GC, пул годится как кеш буферов. Пул снижает число аллокаций, но не хранит объекты надёжно: при GC содержимое переходит в «жертвенный» кеш и затем удаляется.

Варианты ответа

  1. Пул гарантирует, что Get вернёт ранее положенный объект
  2. Пул ограничивает максимальное число объектов размером New
  3. Объекты нужно возвращать в пул из той же горутины, что взяла
  4. Объекты могут пропасть при любом GC, пул годится как кеш буферовправильный ответ

Разбор

Пул снижает число аллокаций, но не хранит объекты надёжно: при GC содержимое переходит в «жертвенный» кеш и затем удаляется. Get может вернуть новый объект от New или nil, если New не задан. Лимитов нет. Класть можно из любой горутины, пул потокобезопасен. Перед Put объект обычно сбрасывают (buf.Reset()), а слишком большие буферы не возвращают.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.