Señalización de gorutinas para que finalicen
En Go, manejar la terminación de gorutinas puede ser crucial para garantizar el cierre correcto de la aplicación o gestionar la asignación de recursos. Este artículo explora una técnica para indicarle a una gorutina en ejecución que detenga su ejecución.
El ejemplo proporcionado en la consulta demuestra una gorutina que realiza bucles infinitos, simulando un procesamiento continuo. El objetivo es finalizar esta rutina si excede un tiempo de espera específico.
Un enfoque inicial implica el uso de dos canales: uno para la comunicación y el otro para la terminación de la señalización. Sin embargo, leer desde el canal de señalización bloquearía la gorutina, anulando su propósito previsto.
Usar un canal de parada adicional
Una solución efectiva es introducir un canal de parada adicional , demasiado tarde, de tipo chan struct{}. Dentro de la rutina, se utiliza una declaración de selección para monitorear tanto el canal de comunicación como el canal de parada. Si el canal tooLate recibe un valor, la rutina regresa con gracia, finalizando su ciclo de procesamiento.
Aquí está el fragmento de código modificado:
func main() {
// tooLate channel to signal goroutine to stop
tooLate := make(chan struct{})
proCh := make(chan string)
go func() {
for {
fmt.Println("working")
time.Sleep(1 * time.Second)
select {
case En esta solución, el canal proCh continúa utilizándose para la comunicación, mientras que el canal tooLate sirve como señal para la terminación. Cuando el canal tooLate está cerrado, la gorutina lo detecta y sale de su bucle.
Otras consideraciones
Además de usar un canal adicional, existen enfoques alternativos para señalar gorutinas, como el uso del tipo sync.Cond incorporado para un control más detallado sobre la sincronización de rutinas. La elección de la técnica depende de los requisitos específicos de su aplicación.
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