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  }