"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo seleccionar de manera eficiente canales de envío con búfer y recepción sin búfer en Go?

¿Cómo seleccionar de manera eficiente canales de envío con búfer y recepción sin búfer en Go?

Publicado el 2024-11-20
Navegar:428

How to Efficiently Select on Buffered Send and Unbuffered Receive Channels in Go?

Ir Idioma: Seleccionar simultáneamente en canales con y sin búfer

La tarea que nos ocupa es lograr la selección simultánea en un canal de envío con búfer y un canal de recepción sin búfer sin consumir constantemente recursos de CPU. Este escenario equivale a bloquear hasta que un canal esté listo para enviar sin transmitir ningún dato.

Para solucionar esto, podemos emplear una instrucción select con un caso predeterminado. Cuando ninguno de los canales está listo, se activa el caso predeterminado, iniciando una breve duración de suspensión. Esto permite la conservación de recursos y al mismo tiempo permite intentos continuos de enviar y recibir datos:

package main

import (
    "fmt"
    "time"
)

func valueToSend() int {
    // Generate a value to send, calculated/acquired each attempt
    return 0
}

func main() {
    s := make(chan

Se debe tener precaución al confiar en las comprobaciones de capacidad o longitud del canal antes de enviar o recibir datos. Estos enfoques pueden provocar un comportamiento inesperado, ya que el estado del canal puede cambiar entre la verificación y la operación real de envío/recepción.

Último tutorial Más>

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