github.com/neilgarb/delve@v1.9.2-nobreaks/_fixtures/goroutinegroup.go (about) 1 package main 2 3 import ( 4 "context" 5 "runtime" 6 "runtime/pprof" 7 "sync" 8 "time" 9 ) 10 11 func sleepyfunc(wg *sync.WaitGroup, lbl string) { 12 defer wg.Done() 13 pprof.SetGoroutineLabels(pprof.WithLabels(context.Background(), pprof.Labels("name", lbl))) 14 time.Sleep(10 * 60 * time.Second) 15 } 16 17 func gopoint1(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) { 18 go f(wg, lbl) 19 } 20 21 func gopoint2(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) { 22 go f(wg, lbl) 23 } 24 25 func gopoint3(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) { 26 go f(wg, lbl) 27 } 28 29 func gopoint4(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) { 30 go f(wg, lbl) 31 } 32 33 func gopoint5(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) { 34 go f(wg, lbl) 35 } 36 37 func startpoint1(wg *sync.WaitGroup, lbl string) { 38 sleepyfunc(wg, lbl) 39 } 40 41 func startpoint2(wg *sync.WaitGroup, lbl string) { 42 sleepyfunc(wg, lbl) 43 } 44 45 func startpoint3(wg *sync.WaitGroup, lbl string) { 46 sleepyfunc(wg, lbl) 47 } 48 49 func startpoint4(wg *sync.WaitGroup, lbl string) { 50 sleepyfunc(wg, lbl) 51 } 52 53 func startpoint5(wg *sync.WaitGroup, lbl string) { 54 sleepyfunc(wg, lbl) 55 } 56 57 func main() { 58 var wg sync.WaitGroup 59 60 for _, lbl := range []string{"one", "two", "three", "four", "five"} { 61 for _, f := range []func(*sync.WaitGroup, string){startpoint1, startpoint2, startpoint3, startpoint4, startpoint5} { 62 for i := 0; i < 1000; i++ { 63 wg.Add(5) 64 gopoint1(&wg, lbl, f) 65 gopoint2(&wg, lbl, f) 66 gopoint3(&wg, lbl, f) 67 gopoint4(&wg, lbl, f) 68 gopoint5(&wg, lbl, f) 69 } 70 } 71 } 72 time.Sleep(2 * time.Second) 73 runtime.Breakpoint() 74 wg.Wait() 75 }