Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "time"
  6. "sync"
  7. )
  8.  
  9. var p sync.Pool
  10. const reqs = 200000
  11. const bufsz = 256
  12.  
  13. func syncpool() {
  14. var buf []byte
  15. v := p.Get()
  16. if v == nil {
  17. buf = make([]byte, bufsz)
  18. } else {
  19. buf = v.([]byte)
  20. }
  21. buf[0] = 12
  22. p.Put(buf)
  23. }
  24.  
  25. func alloc() {
  26. buf := make([]byte, bufsz)
  27. buf[0] = 12
  28. }
  29.  
  30. func bench(f func()) time.Duration {
  31. var wg sync.WaitGroup
  32. t := time.Now()
  33. wg.Add(reqs)
  34. for i := 0; i < reqs; i++ {
  35. go func() {
  36. f()
  37. wg.Done()
  38. }()
  39. }
  40. wg.Wait()
  41. return time.Since(t) / reqs
  42. }
  43.  
  44. func benchSerial(f func()) time.Duration {
  45. t := time.Now()
  46. for i := 0; i < reqs; i++ {
  47. f()
  48. }
  49. return time.Since(t) / reqs
  50. }
  51.  
  52. func main() {
  53. fmt.Println("avg-sp:", bench(syncpool))
  54. fmt.Println("avg-alloc:", bench(alloc))
  55.  
  56. fmt.Println("avg-serial-sp:", benchSerial(syncpool))
  57. fmt.Println("avg-serial-alloc:", benchSerial(alloc))
  58.  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement