En go, los subprocesos son entidades que ejecutan Groutine y la función del programador es asignar Groutines ejecutables a los subprocesos de trabajo.
modelo GPM
No existe una relación cuantitativa absoluta entre el número de M y P. Cuando se bloquea una M, P creará una o cambiará a otra M, por lo que incluso si está configurada, se pueden crear runtime.GOMAXPROCS(1)
múltiples M;
cuando M descubre que está enviando una rutina G para sí misma Cuando la cola P está vacía, "robará" activamente de otras colas P. El iniciador de este proceso es el programador de rutinas.
Cuando M está bloqueado, el programador P liberará el P vinculado al M bloqueado y luego entregará el P a otras áreas M para su ejecución;
Para aprovechar mejor el rendimiento de M y P, el modelo GPM no permitirá que un G1 bloqueado retrase eternamente un P.
En Go, una corrutina puede ocupar hasta 10 ms de CPU, esto es para evitar que otras corrutinas no tengan CPU disponible.