Контест Middle Память, GC и pprof обновлено

Пул объектов как sync.Pool: симуляция на Go

Условие

Смоделируйте пул переиспользуемых объектов (упрощённый sync.Pool). Объекты нумеруются с 1 в порядке создания. В пуле хранится не больше c свободных объектов.

  • get: если пул не пуст, взять из него последний положенный объект (LIFO) и вывести <id> reused; иначе создать новый объект и вывести <id> new.
  • put <id>: вернуть объект, выданный ранее и ещё не возвращённый. Если в пуле меньше c объектов, он кладётся в пул, иначе выбрасывается (его соберёт GC).
  • gc: сборка мусора очищает пул целиком.

В конце выведите created X dropped Y, где Y число объектов, выброшенных при put и при gc.

Ввод: c q (0 ≤ c ≤ 1000, 1 ≤ q ≤ 3000), затем q операций.

Пример

2 7
get
get
put 1
get
put 2
put 1
get
1 new
2 new
1 reused
1 reused
created 2 dropped 0

Как подойти

Стек свободных id на слайсе, счётчики созданных и выброшенных.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.