- Golang uses a user-space component (runtime) linked to the executable.
- The runtime is written in C.
- It has implementation of scheduler, goroutine management and OS-threads management.
- Per go process, there is a max limit of OS threads.
- Go runtime schedules N goroutines on M OS threads
- One goroutine runs exactly on one thread.
- A goroutine can get blocked (e.g. on a syscall) and blocks the OS-thread too.