En Go, es posible realizar operaciones de E/S sin bloqueo en canales utilizando la instrucción select. Sin embargo, surge una pregunta común cuando se trata de un canal de envío con buffer (chan
Un enfoque común es verificar la longitud o capacidad de los canales antes de enviar o recibir. Sin embargo, esto no es confiable porque el estado del canal puede cambiar entre la verificación y la operación posterior:
if len(r) > 0 {
// Optionally execute other code
r La solución: caso predeterminado con retraso de tiempo
Para resolver este problema, puede utilizar una instrucción de selección con un caso predeterminado que incluya un retraso de tiempo breve. Esto evita el uso excesivo de la CPU y le permite volver a intentar la operación si ambos canales no están listos:
s := make(chanAl agregar el caso predeterminado, el programa solo se bloqueará por un corto período si ambos canales no están listos, lo que permitirá que los recursos de la CPU se liberen mientras espera que un canal esté disponible.
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