Контест 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 на слайсе, счётчики созданных и выброшенных.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.