Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "time"
- "sync"
- )
- var p sync.Pool
- const reqs = 200000
- const bufsz = 256
- func syncpool() {
- var buf []byte
- v := p.Get()
- if v == nil {
- buf = make([]byte, bufsz)
- } else {
- buf = v.([]byte)
- }
- buf[0] = 12
- p.Put(buf)
- }
- func alloc() {
- buf := make([]byte, bufsz)
- buf[0] = 12
- }
- func bench(f func()) time.Duration {
- var wg sync.WaitGroup
- t := time.Now()
- wg.Add(reqs)
- for i := 0; i < reqs; i++ {
- go func() {
- f()
- wg.Done()
- }()
- }
- wg.Wait()
- return time.Since(t) / reqs
- }
- func benchSerial(f func()) time.Duration {
- t := time.Now()
- for i := 0; i < reqs; i++ {
- f()
- }
- return time.Since(t) / reqs
- }
- func main() {
- fmt.Println("avg-sp:", bench(syncpool))
- fmt.Println("avg-alloc:", bench(alloc))
- fmt.Println("avg-serial-sp:", benchSerial(syncpool))
- fmt.Println("avg-serial-alloc:", benchSerial(alloc))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement