Junior — Middle
¿Qué consecuencias tendrá en el funcionamiento del programa al establecer GOMAXPROCS en 1 y ejecutar una gorutina infinita?
sobes.tech AI
Respuesta de la IA
Configurar GOMAXPROCS en 1 limita la cantidad de hilos del sistema operativo que puede usar el planificador de Go a uno. Si se inicia una gorutina infinita en este escenario:
- Todos los cálculos se realizarán secuencialmente en un solo hilo.
- Si la gorutina infinita no contiene puntos donde ocurra un cambio de contexto (por ejemplo, llamadas a operaciones bloqueantes o
runtime.Gosched()), otras gorutinas pueden no obtener tiempo de ejecución, lo que provocará que el programa se quede "colgado". - Como resultado, el programa puede dejar de responder o funcionar muy lentamente, ya que el planificador no podrá cambiar de manera eficiente entre gorutinas.
Ejemplo:
package main
import (
"runtime"
"time"
"fmt"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {
// ciclo infinito sin llamar a runtime.Gosched()
}
}()
time.Sleep(time.Second)
fmt.Println("Programa terminado")
}
En este ejemplo, la gorutina principal puede no obtener tiempo de ejecución si la gorutina infinita no cede control, lo que provocará que el programa se quede "colgado".