I wrote the code below and generated an exe file by running “go install” in windows.
func main() {
go func(){for ;true; {fmt.Println("1")}}()
for ; true; {
fmt.Println("0")
}
}
Then I run the exe file and monitor the running process by a tool. As you can see, there are 6 threads running. I guess some of them are for GC, what concrete usage of the 6 threads? (I know M goroutines can be mapped to N the system kernel threads dynamically)
The Go runtime starts threads for many reasons - to run your goroutines, for blocking file I/O, for GC, and maybe for other reasons I don’t know. As far as I know the threads aren’t permanently dedicated to either of these purposes. The execution tracer can probably answer what each thread does if you run it on your specific example.