Durante o desenvolvimento do LiveAPI, uma ferramenta de geração de documentação da API automática, eu precisava implementar um mecanismo de fila robusto que escalou com base no número de núcleos de máquina de servidor. Isso foi crucial para impedir o uso excessivo de recursos (memória e CPU) que poderia levar à fome de recursos, falhas e uma má experiência do usuário.
Neste artigo, explicarei como utilizei mutexes em Golang para enfrentar este desafio.
o que é um mutex?
Na programação simultânea, uma mutex (exclusão mútua) é um mecanismo de travamento que impede as condições de raça, garantindo que apenas uma goroutina possa acessar um recurso compartilhado por vez. É semelhante a uma chave para uma sala - apenas uma pessoa pode segurar a chave e entrar de uma só vez.
Uso mutex em Golang
Vamos ilustrar como um mutex pode gerenciar a execução simultânea de emprego:
O pacote de sincronização do Go fornece várias primitivas para sincronização, com o mutex sendo uma das ferramentas mais usadas.
var ( maxConcurrentJobs int activeJobs int jobMutex sync.Mutex )
Neste código, a variável ActiveJobs rastreia o número de trabalhos atualmente em execução. Como várias goroutinas podem tentar modificar essa variável simultaneamente, levando a condições de corrida, usamos um mutex para sincronizar o acesso.
// Check if we can process more jobs jobMutex.Lock() if activeJobs >= maxConcurrentJobs { jobMutex.Unlock() // Wait before checking again time.Sleep(time.Second) continue } jobMutex.Unlock()
como um mutex funciona
travando : o método Lock () adquire acesso exclusivo à seção crítica.
desbloqueio : o método desbloqueio () libera o Lock.
seção crítica : o código entre bloqueio e desbloqueio onde o recurso compartilhado ** é acessado.
tipos de mutexes em Golang
sync.mutex : este é o bloqueio de exclusão mútua básica no Go. Permite que apenas uma goroutina acesse a seção crítica por vez.
type SafeCounter struct { mu sync.Mutex count int }
sync.rwmutex : este é um leitor/escritor mutex que permite que vários leitores acessem o recurso compartilhado simultaneamente, mas apenas um escritor de cada vez.
type SafeCounter struct { mu sync.Mutex count int }mutexes são ferramentas essenciais para gerenciar recursos compartilhados em programas GO simultâneos. Eles impedem as condições de raça e garantem a integridade dos dados controlando o acesso a seções críticas do código.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3