четверг, 10 октября 2019 г.

Паттерны в Golang: Object Pool (Пул объектов)

Object Pool это порождающий паттерн проектирования, используемый для подготовки и хранения множественных экземпляров согласно заданным параметрам.

Реализация

package pool

type Pool chan *Object

func New(total int) *Pool {
  p := make(Pool, total)

  for i := 0; i < total; i++ {
    p <- new(Object)
  }

  return &p
}

Использование

Ниже приведен простой пример жизненного цикла для пула объектов.

p := pool.New(2)

select {
case obj := <-p:
  obj.Do( /*...*/ )

  p <- obj
default:
  // Больше не осталось объектов - 
  // повторите попытку позже 
  // или обработайте неудачное получение
  return
}

Резюме

Паттерн пула объектов полезен в случаях, когда инициализация объекта более дороже, чем обслуживание объекта.

Если есть всплески спроса на объекты в отличие от постоянного спроса, накладные расходы обслуживания могут перевесить преимущества пула объектов.

Паттерн пул объектов положительно влияет на производительность из-за предварительной инициализации объектов.


Читайте также:


Комментариев нет:

Отправить комментарий