Comunicación asincrónica con preparación del canal
En Go, los canales facilitan la comunicación simultánea entre gorutinas. Cuando se trata de canales de envío con búfer y canales de recepción sin búfer, es posible seleccionar ambos canales simultáneamente para optimizar el flujo de comunicación. Este artículo explora el enfoque para implementar esta funcionalidad mientras se minimiza el uso de la CPU.
Para comprender el problema, considere el siguiente contexto:
s := make(chanLa pregunta surge si es posible seleccionar en ambos canales de modo que r se seleccione cuando los datos estén disponibles para leer y s se seleccione cuando el canal no está lleno.
Solución
Se puede lograr esto usando una instrucción select con un caso predeterminado. Dado que el valor a enviar se evalúa solo una vez cuando se usa select, si ambos canales no están listos, el valor queda obsoleto. Para evitar esto, se agrega un caso predeterminado a la declaración de selección, que se ejecuta si ninguno de los canales está listo. En este caso predeterminado, el programa duerme durante un breve período, lo que permite que los canales estén listos y luego vuelve a intentarlo con un valor actualizado.
s := make(chanAdvertencia
No se recomienda usar len(r) o cap(s) para verificar que el canal esté listo y luego enviar/recibir porque el canal puede cambiar su estado entre el cheque y el intento de enviar/recibir.
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