golang full for close chile check go channel

full - ¿Cómo se implementan los canales Go?



golang for range channel (1)

El archivo de origen de los canales es (desde su raíz de código fuente de go) en /src/pkg/runtime/chan.go .

hchan es la estructura central de datos para un canal, con listas vinculadas de envío y recepción (sosteniendo un puntero a su goroutine y el elemento de datos) y una bandera closed . Hay una estructura integrada de Lock que se define en runtime2.go y que sirve como un mutex (futex) o semáforo en función del sistema operativo. La implementación de bloqueo se encuentra en lock_futex.go (Linux / Dragonfly / Some BSD) o lock_sema.go (Windows / OSX / Plan9 / Algunos BSD), en función de las etiquetas de compilación.

Las operaciones de canal están todas implementadas en este archivo chan.go, por lo que puede ver las operaciones de makechan, enviar y recibir, así como también las construcciones select de construir, cerrar, len y cap.

Para una gran explicación en profundidad sobre el funcionamiento interno de los canales, debes leer los canales Go con esteroides por el propio Dmitry Vyukov (Go core dev, goroutines, scheduler y channels, entre otras cosas).

Después de (brevemente) revisar las especificaciones de idioma Ir, el Go efectivo y el modelo de memoria Go, todavía no estoy muy claro cómo funcionan los canales Go bajo el capó.

¿Qué tipo de estructura son? Actúan como una cola / matriz segura para subprocesos.

¿Su implementación depende de la arquitectura?