1
0
mirror of https://github.com/tmrts/go-patterns.git synced 2025-02-18 13:33:13 +03:00
go-patterns/creational/object-pool.md
genewoo aac74afa38
Fix issue of "invalid operation:p"
When ```New``` return a reference, you have to use ```*p``` to access the reference, otherwise it's a pointer.
2018-10-17 15:14:01 +08:00

925 B

Object Pool Pattern

The object pool creational design pattern is used to prepare and keep multiple instances according to the demand expectation.

Implementation

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
}

Usage

Given below is a simple lifecycle example on an object pool.

p := pool.New(2)

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

	*p <- obj
default:
	// No more objects left — retry later or fail
	return
}

Rules of Thumb

  • Object pool pattern is useful in cases where object initialization is more expensive than the object maintenance.
  • If there are spikes in demand as opposed to a steady demand, the maintenance overhead might overweigh the benefits of an object pool.
  • It has positive effects on performance due to objects being initialized beforehand.