Al ejecutar un código en Go Playground, los desarrolladores pueden encontrar discrepancias en comparación con la ejecución del mismo código en sus máquinas locales. Este artículo explora las diferencias de comportamiento, particularmente cuando se trata de gorutinas y mecanismos de sincronización.
Considere el siguiente código Go:
package main
import (
"fmt"
)
func other(done chan bool) {
done En el patio de juegos de Go, este código genera un error: "El proceso tardó demasiado". Esto sugiere que la rutina creada dentro de la otra función se ejecuta indefinidamente.
Sin embargo, ejecutar el mismo código en una máquina local con múltiples núcleos de CPU (GOMAXPROCS > 1) produce el siguiente resultado:
Hello, playground
Finished.
Esto implica que la rutina creada dentro de otras termina cuando finaliza la rutina principal.
Explicando la brecha de comportamiento
El comportamiento diferente entre el patio de juegos de Go y la máquina local se puede atribuir a la cantidad de procesadores disponibles. En el patio de juegos de Go, GOMAXPROCS tiene el valor predeterminado 1, lo que significa que solo se puede ejecutar una gorutina a la vez. Por lo tanto, en el ejemplo anterior, la rutina interminable creada dentro de otra impide que la rutina principal continúe. ejecutar al mismo tiempo. Por lo tanto, la rutina interminable creada dentro de otra no bloquea la salida de la rutina principal.
Conclusión
El comportamiento de las rutinas en Go depende de la cantidad de procesadores disponibles (GOMAXPROCS). Si bien el área de juegos de Go utiliza un valor predeterminado de 1, lo que puede dar lugar a la percepción de gorutinas ejecutándose indefinidamente, ejecutar el mismo código en una máquina local con múltiples núcleos proporciona un comportamiento diferente en el que las gorutinas pueden terminar cuando finaliza la gorutina principal. Esta comprensión ayuda a los desarrolladores a evitar malentendidos y garantiza que su código se comporte como se espera en diferentes entornos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3