6
Jul
2021

pprof

06 Jul 2021
Generate reports in app with code: CPU cpuFile, err := os.Create("/tmp/cpuProfile.out") if err != nil { fmt.Println(err) return } pprof.StartCPUProfile(cpuFile) defer pprof.StopCPUProfile() // CODE HERE runtime.GC() Memory memory, err := os.Create("/tmp/memoryProfile.out") if err != nil { fmt.Println(err) return } defer memory.Close() // CODE HERE err = pprof.WriteHeapProfile(memory) if err != nil { fmt.Println(err) return } View reports with go tool pprof
go
23
Apr
2021

Mutex example

23 Apr 2021
# 1.Without package main import "fmt" var counter int = 0 func main() { ch := make(chan bool) for i := 1; i < 5; i++{ go work(i, ch) } for i := 1; i < 5; i++{ <-ch } fmt.Println("The End") } func work (number int, ch chan bool){ counter = 0 for k := 1; k <= 5; k++{ counter++ fmt.Println("Goroutine", number, "-", counter) } ch <- true } Output Goroutine 3 - 1 Goroutine 3 - 2 Goroutine 3 - 3 Goroutine 3 - 4 Goroutine 3 - 5 Goroutine 2 - 1 Goroutine 2 - 6 Goroutine 2 - 7 Goroutine 2 - 8 Goroutine 2 - 9 Goroutine 1 - 1 Goroutine 1 - 10 Goroutine 1 - 11 Goroutine 1 - 12 Goroutine 1 - 13 Goroutine 4 - 1 Goroutine 4 - 14 Goroutine 4 - 15 Goroutine 4 - 16 Goroutine 4 - 17 The End # 2. With package main import ( "fmt" "sync" ) var counter int = 0 func main() { ch := make(chan bool) var mutex sync.Mutex for i := 1; i < 5; i++{ go work(i, ch, &mutex) } for i := 1; i < 5; i++{ <-ch } fmt.Println("The End") } func work (number int, ch chan bool, mutex *sync.Mutex){ mutex.Lock() counter = 0 for k := 1; k <= 5; k++{ counter++ fmt.Println("Goroutine", number, "-", counter) } mutex.Unlock() ch <- true } Output Goroutine 1 - 1 Goroutine 1 - 2 Goroutine 1 - 3 Goroutine 1 - 4 Goroutine 1 - 5 Goroutine 4 - 1 Goroutine 4 - 2 Goroutine 4 - 3 Goroutine 4 - 4 Goroutine 4 - 5 Goroutine 3 - 1 Goroutine 3 - 2 Goroutine 3 - 3 Goroutine 3 - 4 Goroutine 3 - 5 Goroutine 2 - 1 Goroutine 2 - 2 Goroutine 2 - 3 Goroutine 2 - 4 Goroutine 2 - 5 The End
go