Prácticas recomendadas avanzadas de concurrencia
Patrones para APIs y servicios concurrentes resilientes.
Busca en todas las páginas de la documentación
Patrones para APIs y servicios concurrentes resilientes.
Estas reglas resumen la sección de concurrencia avanzada: paralelismo limitado, propagación de cancelación, apagado limpio y pruebas de seguridad con tests y perfiles.
x/sync.MaxOpenConns de la base de datos y las cuotas de los socios de la API.context.Context como primer parámetro después del receptor. La cancelación se propaga a través de clientes QueryContext, gRPC y HTTP.r.Context() en los manejadores HTTP. Vincular el trabajo del manejador a la desconexión del cliente y al apagado del servidor.errgroup con WithContext. La primera falla cancela a los hermanos que aún realizan E/S.ctx.Done() en cada bucle largo o reintento de bloqueo. Ninguna goroutine debe ignorar la cancelación durante segundos.errgroup para lotes de un solo uso. No mezclar metáforas sin límites claros.errgroup o structs Result tipificados. No entrar en pánico desde goroutines de trabajadores.atomic.Pointer. Los lectores cargan instantáneas; los escritores publican nuevas structs.Server.Shutdown y luego cancelar el contexto raíz.WaitGroup en los productores antes de cerrar.WaitGroup, Wait de errgroup, o Shutdown del pool en main.terminationGracePeriodSeconds.go test -race en paquetes concurrentes en CI. Bloquear la fusión en condiciones de carrera de datos.pprof antes de lanzamientos importantes.Propagación del contexto de solicitud, semáforo de salida, apagado elegante y -race en CI en paquetes de manejadores.
Un mutex alrededor de un mapa suele ser más claro.
Canales al pasar la propiedad entre etapas, no para cada lectura compartida.
No hay un número fijo: demasiadas son cuando la memoria, la latencia de planificación o los errores descendentes aumentan sin ganancia de rendimiento.
Úselo para recuperaciones paralelas con cancelación compartida.
Los pools de trabajadores y las uniones simples de WaitGroup siguen siendo válidos.
Métricas de una sola palabra y banderas actualizadas a alta frecuencia.
Los invariantes de múltiples campos necesitan mutex o transacciones.
Rastree el inicio, el estado estable, la ruta de error y el apagado en papel.
Verifique que cada go tenga una salida y cada canal tenga un único remitente.
Sincroniza de forma más agresiva pero no previene fugas o deadlocks por sí solo.
Tamaños de pool, límites de velocidad, política de descarte y orden de apagado: números que los revisores pueden cuestionar.
Aceptable cuando las necesidades de métricas justifican la dependencia.
Los canales de la biblioteca estándar más errgroup cubren la mayoría de los servicios.
Después de refactorizaciones de concurrencia y antes de la temporada alta.
Automatice una prueba de carga de humo en cada candidato a lanzamiento.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (Green Tea GC por defecto,
go fix modernizers- verificar parche en la compilación), chi (última - verificar en la compilación), gin (última - verificar en la compilación), echo (última - verificar en la compilación), google.golang.org/grpc (última - verificar en la compilación), sigs.k8s.io/controller-runtime (última - verificar en la compilación), kubebuilder (última - verificar en la compilación), tinygo (última - verificar objetivos de placa en la compilación), wazero (última - verificar en la compilación) y golangci-lint (última - verificar conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026