At about 856K MPS (sent + received) @ 1024 bytes/msg, that's less than 1 GBps. So I can't imagine it being io(net) bound either.
So inconclusive...unfortunately. Need to profile a bit more to know.
Edit: Tho this is TCP based so it's possible that it's netio bound given the protocol overhead. At this message rate, each packet is almost guaranteed to be full size. So we are doing about 600K pps, approximately.
If you are doing tcp over loopback, the MTU is 64K, IIRC. You should be able to pack more messages per packet. Since you aren't CPU bound, you are probably memory bound.
Also if you on a non-kernelbypass accelerated host, wire-to-application memory takes about 10 micros, so wire-to-memory-to-wire will probably land somewhere around 20 microseconds.
Mac OS Yosemite..
grep for GOMAXPROCS didn't turn up anything so not sure what you mean by that. This may help with core utilization.
func init() {
//
runtime.GOMAXPROCS(runtime.NumCPU())
// …
}