107 lines
1.7 KiB
Go
107 lines
1.7 KiB
Go
package objectpool
|
|
|
|
import (
|
|
"fmt"
|
|
"math/big"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestBigIntPool(t *testing.T) {
|
|
var wg sync.WaitGroup
|
|
|
|
a := time.Now().UnixNano()
|
|
for i := 0; i < 100; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
for i := 0; i < 1000000; i++ {
|
|
a := new(big.Int)
|
|
a.SetInt64(1)
|
|
a.Add(a, a)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
b := time.Now().UnixNano()
|
|
for i := 0; i < 100; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
for j := 0; j < 1000000; j++ {
|
|
a := GetBigInt()
|
|
a.SetInt64(1)
|
|
a.Add(a, a)
|
|
PutBigInt(a)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
c := time.Now().UnixNano()
|
|
fmt.Println("without pool ", b-a)
|
|
fmt.Println("with pool ", c-b)
|
|
}
|
|
|
|
func bytesFactory(n int) []byte {
|
|
return make([]byte, n)
|
|
}
|
|
func doSomeWork(b []byte) {
|
|
for i := 0; i < len(b); i++ {
|
|
b[i] = byte(i)
|
|
}
|
|
}
|
|
|
|
func TestBytesFactory(t *testing.T){
|
|
a := 0
|
|
fmt.Printf("%p\n",&a)
|
|
b := bytesFactory(1024) // b is not on stack
|
|
fmt.Printf("%p\n", &(b[0]))
|
|
}
|
|
func TestBytesPool(t *testing.T) {
|
|
var wg sync.WaitGroup
|
|
|
|
a := time.Now().UnixNano()
|
|
for i := 0; i < 100; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
for i := 0; i < 10000; i++ {
|
|
a := bytesFactory(1024)
|
|
doSomeWork(a)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
b := time.Now().UnixNano()
|
|
for i := 0; i < 100; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
for j := 0; j < 10000; j++ {
|
|
a := GetBytes()
|
|
doSomeWork(a)
|
|
PutBytes(a)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
c := time.Now().UnixNano()
|
|
fmt.Println("without pool ", b-a)
|
|
fmt.Println("with pool ", c-b)
|
|
}
|
|
|
|
|
|
func BenchmarkBytesPool(b *testing.B) {
|
|
for j := 0; j < 10000; j++ {
|
|
a := GetBytes()
|
|
doSomeWork(a)
|
|
PutBytes(a)
|
|
}
|
|
}
|
|
func BenchmarkBytesMake(b *testing.B) {
|
|
for j := 0; j < 10000; j++ {
|
|
a := bytesFactory(1024)
|
|
doSomeWork(a)
|
|
}
|
|
} |