Skip to content

Instantly share code, notes, and snippets.

@lucas-clemente
Created October 11, 2016 09:28
Show Gist options
  • Save lucas-clemente/8a6029552fdc6bcba609a840d04da699 to your computer and use it in GitHub Desktop.
Save lucas-clemente/8a6029552fdc6bcba609a840d04da699 to your computer and use it in GitHub Desktop.
package main
import (
"net"
"net/http"
_ "net/http/pprof"
)
const host = "localhost:4242"
var sink int
// Takes a few ms CPU time
func doSomething() {
for i := 0; i < 1000000; i++ {
sink += i
}
}
// Opens a UDP listener and ignores any data
func udpSink() {
laddr, err := net.ResolveUDPAddr("udp", host)
if err != nil {
panic(err)
}
l, err := net.ListenUDP("udp", laddr)
if err != nil {
panic(err)
}
buf := make([]byte, 1000)
for {
_, _, err := l.ReadFromUDP(buf)
if err != nil {
panic(err)
}
}
}
func main() {
go http.ListenAndServe("localhost:8080", nil)
go udpSink()
addr, err := net.ResolveUDPAddr("udp", host)
if err != nil {
panic(err)
}
c, err := net.DialUDP("udp", nil, addr)
if err != nil {
panic(err)
}
buf := make([]byte, 1000)
for {
// First, send
_, err = c.Write(buf)
if err != nil {
panic(err)
}
// then, occupy CPU
doSomething()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment