package main
import (
"time"
"fmt"
)
const (
chan_size = 1000
cycle_count = 1000
)
var (
v_ch = make(chan t, chan_size)
p_ch = make(chan *t, chan_size)
)
type t struct {
a uint
b uint
}
func fill_v() {
for i := 0; i < chan_size; i++ {
b := t{a:3, b:5}
v_ch <- b
}
}
func fill_p() {
for i := 0; i < chan_size; i++ {
b := t{a:3, b:5}
p_ch <- &b
}
}
func measure_f(f func()) int64 {
f();
elapsed
:= time.
Since(start
) return elapsed.Nanoseconds()
}
func main() {
var v_nanos int64 = 0
var p_nanos int64 = 0
for i := 0; i<cycle_count; i++ {
v_nanos += measure_f(fill_v);
for i := 0; i < chan_size; i++ {
_ = <- v_ch
}
}
for i := 0; i<cycle_count; i++ {
p_nanos += measure_f(fill_p);
for i := 0; i < chan_size; i++ {
_ = <- p_ch
}
}
fmt.Println(
"v:",v_nanos/cycle_count,
" p:", p_nanos/cycle_count,
"ratio (v/p):", float64(v_nanos)/float64(p_nanos))
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAogICAgInRpbWUiCiAgICAiZm10IgopCgpjb25zdCAoCiAgICBjaGFuX3NpemUgPSAxMDAwCiAgICBjeWNsZV9jb3VudCA9IDEwMDAKKQoKdmFyICgKICAgIHZfY2ggPSBtYWtlKGNoYW4gdCwgY2hhbl9zaXplKQogICAgcF9jaCA9IG1ha2UoY2hhbiAqdCwgY2hhbl9zaXplKQopCgp0eXBlIHQgc3RydWN0IHsKICAgIGEgdWludAogICAgYiB1aW50Cn0KCmZ1bmMgZmlsbF92KCkgewogICAgZm9yIGkgOj0gMDsgaSA8IGNoYW5fc2l6ZTsgaSsrIHsKICAgICAgICBiIDo9IHR7YTozLCBiOjV9CiAgICAgICAgdl9jaCA8LSBiCiAgICB9Cn0KCmZ1bmMgZmlsbF9wKCkgewogICAgZm9yIGkgOj0gMDsgaSA8IGNoYW5fc2l6ZTsgaSsrIHsKICAgICAgICBiIDo9IHR7YTozLCBiOjV9CiAgICAgICAgcF9jaCA8LSAmYgogICAgfQp9CgpmdW5jIG1lYXN1cmVfZihmIGZ1bmMoKSkgaW50NjQgewogICAgc3RhcnQgOj0gdGltZS5Ob3coKQogICAgZigpOwogICAgZWxhcHNlZCA6PSB0aW1lLlNpbmNlKHN0YXJ0KQogICAgcmV0dXJuIGVsYXBzZWQuTmFub3NlY29uZHMoKQp9CgpmdW5jIG1haW4oKSB7CgogICAgdmFyIHZfbmFub3MgaW50NjQgPSAwCiAgICB2YXIgcF9uYW5vcyBpbnQ2NCA9IDAKICAgIGZvciBpIDo9IDA7IGk8Y3ljbGVfY291bnQ7IGkrKyB7CiAgICAgICAgdl9uYW5vcyArPSBtZWFzdXJlX2YoZmlsbF92KTsKICAgICAgICBmb3IgaSA6PSAwOyBpIDwgY2hhbl9zaXplOyBpKysgewogICAgICAgICAgICBfID0gPC0gdl9jaAogICAgICAgIH0KICAgIH0KICAgIGZvciBpIDo9IDA7IGk8Y3ljbGVfY291bnQ7IGkrKyB7CiAgICAgICAgcF9uYW5vcyArPSBtZWFzdXJlX2YoZmlsbF9wKTsKICAgICAgICBmb3IgaSA6PSAwOyBpIDwgY2hhbl9zaXplOyBpKysgewogICAgICAgICAgICBfID0gPC0gcF9jaAogICAgICAgIH0KICAgIH0KICAgIGZtdC5QcmludGxuKAogICAgICAgICJ2OiIsdl9uYW5vcy9jeWNsZV9jb3VudCwgCiAgICAgICAgIiBwOiIsIHBfbmFub3MvY3ljbGVfY291bnQsIAogICAgICAgICJyYXRpbyAodi9wKToiLCBmbG9hdDY0KHZfbmFub3MpL2Zsb2F0NjQocF9uYW5vcykpCn0=