fork(1) download
  1. package main
  2.  
  3. import (
  4. "time"
  5. "fmt"
  6. )
  7.  
  8. const (
  9. chan_size = 1000
  10. cycle_count = 1000
  11. )
  12.  
  13. var (
  14. v_ch = make(chan t, chan_size)
  15. p_ch = make(chan *t, chan_size)
  16. )
  17.  
  18. type t struct {
  19. a uint
  20. b uint
  21. }
  22.  
  23. func fill_v() {
  24. for i := 0; i < chan_size; i++ {
  25. b := t{a:3, b:5}
  26. v_ch <- b
  27. }
  28. }
  29.  
  30. func fill_p() {
  31. for i := 0; i < chan_size; i++ {
  32. b := t{a:3, b:5}
  33. p_ch <- &b
  34. }
  35. }
  36.  
  37. func measure_f(f func()) int64 {
  38. start := time.Now()
  39. f();
  40. elapsed := time.Since(start)
  41. return elapsed.Nanoseconds()
  42. }
  43.  
  44. func main() {
  45.  
  46. var v_nanos int64 = 0
  47. var p_nanos int64 = 0
  48. for i := 0; i<cycle_count; i++ {
  49. v_nanos += measure_f(fill_v);
  50. for i := 0; i < chan_size; i++ {
  51. _ = <- v_ch
  52. }
  53. }
  54. for i := 0; i<cycle_count; i++ {
  55. p_nanos += measure_f(fill_p);
  56. for i := 0; i < chan_size; i++ {
  57. _ = <- p_ch
  58. }
  59. }
  60. fmt.Println(
  61. "v:",v_nanos/cycle_count,
  62. " p:", p_nanos/cycle_count,
  63. "ratio (v/p):", float64(v_nanos)/float64(p_nanos))
  64. }
Success #stdin #stdout 0.16s 790016KB
stdin
Standard input is empty
stdout
v: 34875  p: 59420 ratio (v/p): 0.586923845267128