package main
import (
"fmt"
"runtime"
"sync"
"sync/atomic"
)
func main() {
fmt.Println("NumCPU:", runtime.NumCPU())
fmt.Println("NumGoroutine: First", runtime.NumGoroutine())
var counter int64
const gs = 100
var wg sync.WaitGroup
wg.Add(gs)
for i := 0; i < gs; i++ {
go func() {
atomic.AddInt64(&counter, 1)
runtime.Gosched()
fmt.Println("Counter:\t", atomic.LoadInt64(&counter))
wg.Done()
}()
fmt.Println("NumGoroutine:", runtime.NumGoroutine())
}
wg.Wait()
fmt.Println("NumGoroutine: Last", runtime.NumGoroutine())
fmt.Println("count:", counter)
}
Hello GO Community, I am new to go since i was learning concurrency in go i came across this piece of code where i cannot get the control flow of the code. I know the output is never the same as everything runs in parallel for this code.
Below is the output i got on my terminal/cmd.
NumCPU: 4
NumGoroutine: First 1
NumGoroutine: 2
Counter: 1
NumGoroutine: 2
Counter: 2
NumGoroutine: 2
Counter: 3
NumGoroutine: 2
Counter: 4
NumGoroutine: 3
Counter: 5
NumGoroutine: 2
Counter: 6
NumGoroutine: 2
Counter: 7
NumGoroutine: 3
Counter: 8
NumGoroutine: 3
Counter: 9
NumGoroutine: 3
Counter: 10
NumGoroutine: 3
Counter: 11
NumGoroutine: 3
Counter: 12
NumGoroutine: 3
Counter: 13
NumGoroutine: 3
Counter: 14
NumGoroutine: 3
Counter: 15
NumGoroutine: 3
Counter: 16
NumGoroutine: 3
Counter: 17
NumGoroutine: 3
Counter: 18
NumGoroutine: 3
Counter: 19
NumGoroutine: 3
Counter: 20
NumGoroutine: 3
Counter: 21
NumGoroutine: 3
Counter: 22
NumGoroutine: 3
Counter: 23
NumGoroutine: 3
Counter: 24
NumGoroutine: 3
Counter: 25
NumGoroutine: 3
Counter: 26
NumGoroutine: 3
Counter: 27
NumGoroutine: 3
Counter: 28
NumGoroutine: 3
Counter: 29
NumGoroutine: 3
Counter: 30
NumGoroutine: 3
Counter: 31
NumGoroutine: 3
Counter: 32
NumGoroutine: 3
Counter: 33
NumGoroutine: 3
Counter: 34
NumGoroutine: 3
Counter: 35
NumGoroutine: 3
Counter: 36
NumGoroutine: 3
Counter: 37
NumGoroutine: 3
Counter: 38
NumGoroutine: 3
NumGoroutine: 3
Counter: 39
Counter: 40
NumGoroutine: 4
Counter: 41
NumGoroutine: 3
Counter: 42
NumGoroutine: 3
Counter: 43
NumGoroutine: 3
Counter: 44
NumGoroutine: 3
Counter: 45
NumGoroutine: 3
Counter: 46
NumGoroutine: 3
Counter: 47
NumGoroutine: 3
NumGoroutine: 3
Counter: 48
Counter: 49
NumGoroutine: 4
Counter: 50
NumGoroutine: 3
Counter: 51
NumGoroutine: 3
Counter: 52
NumGoroutine: 3
Counter: 53
NumGoroutine: 3
Counter: 54
NumGoroutine: 3
NumGoroutine: 3
Counter: 55
Counter: 56
NumGoroutine: 4
Counter: 57
NumGoroutine: 3
Counter: 58
NumGoroutine: 3
Counter: 59
NumGoroutine: 3
Counter: 60
NumGoroutine: 3
NumGoroutine: 3
Counter: 61
Counter: 62
NumGoroutine: 4
Counter: 63
NumGoroutine: 3
NumGoroutine: 3
Counter: 64
Counter: 65
NumGoroutine: 4
Counter: 66
NumGoroutine: 3
Counter: 67
NumGoroutine: 3
Counter: 68
NumGoroutine: 3
Counter: 69
NumGoroutine: 3
Counter: 70
NumGoroutine: 3
Counter: 71
NumGoroutine: 3
Counter: 72
NumGoroutine: 3
Counter: 73
NumGoroutine: 3
Counter: 74
NumGoroutine: 3
Counter: 75
NumGoroutine: 3
Counter: 76
NumGoroutine: 3
Counter: 77
NumGoroutine: 3
Counter: 78
NumGoroutine: 3
Counter: 79
NumGoroutine: 3
Counter: 80
NumGoroutine: 3
Counter: 81
NumGoroutine: 3
Counter: 82
NumGoroutine: 3
Counter: 83
NumGoroutine: 3
Counter: 84
NumGoroutine: 3
Counter: 85
NumGoroutine: 3
Counter: 86
NumGoroutine: 3
Counter: 87
NumGoroutine: 3
Counter: 88
NumGoroutine: 3
Counter: 89
NumGoroutine: 3
Counter: 90
NumGoroutine: 3
Counter: 91
NumGoroutine: 3
Counter: 92
NumGoroutine: 3
Counter: 93
NumGoroutine: 3
Counter: 94
NumGoroutine: 3
Counter: 95
NumGoroutine: 3
Counter: 96
NumGoroutine: 3
Counter: 97
NumGoroutine: 3
Counter: 98
NumGoroutine: 3
Counter: 99
NumGoroutine: 3
Counter: 100
NumGoroutine: Last 1
count: 100
What happens when the program hit the line runtime.Gosched() for the first time where does the control flow go towards.
why do in the 3rd line of output i got NumGoroutine printed prior to count.