несколько контекстов владеющих объектом взятым из пула. Вам необходим подсчёт ссылок. Так вот, как вы его (подсчёт ссылок) реализовывали? Кто нибудь имплементировал lock free подсчёт? Вот статья с lock free реализацией http://www.hydrogen18.com/blog/reference-counted-pool-golang.html, но она ошибочна, там есть race condition. Т. е. мы можем положить в пул объект, который ещё использует другой контекст.
а зачем это надо?
Ну тут очень просто на самом деле. Откатимся на частый пример использования, у нас есть сервер, вы приняли запрос, обрабатывая его вы взяли сущность из пула, завершили обработку - положили в пул. Теперь чуть сложнее, есть сервер, вы приняли запрос, взяли сущность из пула, для его дополнительной обработки вы отдали сущность в горутину (n горутин). Горутины завершаются, какая из них должна положить сущность обратно в пул? Но это тоже простой пример, лучше рассуждать более абстрактно, есть n контекстов имеющих ссылку на объект из пула, и без подсчёта ссылок вы не можете сказать какой из контекстов должен вернуть объект в пул.
Немного не понял. Мы взяли сущность и отдали её N-горутинам. Почему горутины должны думать, как положить её обратно в пул? У нас в коде, как пример, правило, кто взял, тот и положил. Кто открыл соединение, тот и закрыл и всё в этом духе. Расскажите подробнее.
Обсуждают сегодня