Melhores Práticas Avançadas de Concorrência
Padrões para APIs e serviços concorrentes resilientes.
Busque em todas as páginas da documentação
Padrões para APIs e serviços concorrentes resilientes.
Estas regras destilam a seção de concorrência avançada: paralelismo limitado, propagação de cancelamento, encerramento limpo e prova de segurança com testes e perfis.
x/syncMaxOpenConns do banco de dados e às cotas de APIs parceiras.context.Context como o primeiro parâmetro após o receiver. O cancelamento se propaga através de QueryContext, clientes gRPC e HTTP.r.Context() em manipuladores HTTP. Vincule o trabalho do manipulador à desconexão do cliente e ao encerramento do servidor.WithContext. A primeira falha cancela os irmãos que ainda estão fazendo I/O.ctx.Done() em todo loop longo ou retry bloqueante. Nenhuma goroutine deve ignorar o cancelamento por segundos.Result tipadas. Não entre em pânico de goroutines worker.atomic.Pointer. Leitores carregam snapshots; escritores publicam novas structs.Server.Shutdown e depois cancele o contexto raiz.WaitGroup, Wait do errgroup, ou Shutdown do pool em main.terminationGracePeriodSeconds.go test -race em pacotes concorrentes em CI. Bloqueie merge em data races.pprof antes de grandes lançamentos.Propagação de contexto de requisição, semáforo de saída, encerramento gracioso e -race em CI em pacotes de manipuladores.
Mutex em torno de um map geralmente é mais claro.
Canais ao passar propriedade entre estágios, não para cada leitura compartilhada.
Nenhum número fixo - muitas são quando a memória, a latência de agendamento ou os erros downstream aumentam sem ganho de throughput.
Use-o para buscas paralelas com cancelamento compartilhado.
Pools de workers e junções simples de WaitGroup continuam válidos.
Métricas de palavra única e flags atualizadas com alta frequência.
Invariantes de múltiplos campos precisam de mutex ou transações.
Trace a inicialização, estado estável, caminho de erro e encerramento no papel.
Verifique se cada go tem uma saída e cada canal tem um único fechador.
Ele sincroniza de forma mais agressiva, mas não previne vazamentos ou deadlocks por si só.
Tamanhos de pool, limites de taxa, política de descarte e ordem de encerramento - números que os revisores podem contestar.
Aceitável quando as necessidades de métricas justificam a dependência.
Canais da biblioteca padrão mais errgroup cobrem a maioria dos serviços.
Após refatorações de concorrência e antes da temporada de pico.
Automatize um smoke load em cada candidato a lançamento.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizers - verifique o patch na compilação), chi (última - verifique na compilação), gin (última - verifique na compilação), echo (última - verifique na compilação), google.golang.org/grpc (última - verifique na compilação), sigs.k8s.io/controller-runtime (última - verifique na compilação), kubebuilder (última - verifique na compilação), tinygo (última - verifique os alvos de placa na compilação), wazero (última - verifique na compilação) e golangci-lint (última - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026