Go runtime library contains user-space scheduler which maps lightweight Go threads to heavyweight OS threads in M:N manner. By the way, Go runtime library allows running user code in only one OS thread per process, all other OS threads must be in the state of blocking system call. So, no mutexes &#x2F; interlocked instructions are required to access global data from goroutines, but this comes at the cost of reduced parallelism compared to C&#x2F;C++ (which author of original article seems to be unaware of).