No Go, é possível realizar operações de E/S sem bloqueio em canais usando a instrução select. No entanto, surge uma questão comum ao lidar com um canal de envio com buffer (chan
Uma abordagem comum é verificar o comprimento ou a capacidade dos canais antes de enviar ou receber. No entanto, isso não é confiável porque o estado do canal pode mudar entre a verificação e a operação subsequente:
if len(r) > 0 {
// Optionally execute other code
r A solução: caso padrão com atraso de tempo
Para resolver esse problema, você pode usar uma instrução select com um caso padrão que inclui um pequeno atraso de tempo. Isso evita o uso excessivo da CPU e permite que você tente novamente a operação se ambos os canais não estiverem prontos:
s := make(chanAo adicionar o caso padrão, o programa só bloqueará por um curto período se ambos os canais não estiverem prontos, permitindo que os recursos da CPU sejam liberados enquanto espera que um canal fique disponível.
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