51 lines
805 B
Go
51 lines
805 B
Go
package main
|
|
|
|
// go test -bench=. pool_test.go -benchmem
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
type Person struct {
|
|
name string
|
|
}
|
|
|
|
type PersonsPool struct {
|
|
pool sync.Pool
|
|
}
|
|
|
|
func NewPersonsPool() *PersonsPool {
|
|
return &PersonsPool{
|
|
pool: sync.Pool{
|
|
New: func() interface{} { return new(Person) },
|
|
},
|
|
}
|
|
}
|
|
func (p *PersonsPool) Get() *Person {
|
|
return p.pool.Get().(*Person)
|
|
}
|
|
|
|
func (p *PersonsPool) Put(person *Person) {
|
|
p.pool.Put(person)
|
|
}
|
|
|
|
var gPerson *Person
|
|
|
|
func BenchmarkWithPool(b *testing.B) {
|
|
pool := NewPersonsPool()
|
|
for i := 0; i < b.N; i++ {
|
|
person := pool.Get()
|
|
person.name = "Ivan" // need to reset values
|
|
gPerson = person
|
|
pool.Put(person)
|
|
}
|
|
}
|
|
|
|
func BenchmarkWithoutPool(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
person := &Person{name: "Ivan"}
|
|
gPerson = person
|
|
}
|
|
}
|