Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 14970|Resposta: 3

[Fonte] [Combate real]. NET/C# usa SemaphoreSlim para limitar métodos de execução concorrente

[Copiar link]
Publicado em 19/02/2022 21:23:20 | | | |
Requisitos: Devido aos recursos limitados do hardware, o programa precisa consumir uma certa quantidade de recursos de hardware; no caso de alta concorrência, se alguns métodos que consomem muitos recursos do programa não forem restritos (exportando uma grande quantidade de dados para uma tabela Excel), isso pode afetar a incapacidade de todo o programa de fornecer serviços normais, além de afetar a operação normal do sistema operacional.

Semáforo e SemáforoDiferença Slim

SemaphoreSlim e Semaphore são funcionalmente semelhantes. SemaphoreSlim é cerca de 4 vezes mais rápido que o Semaphore, mas o SemaphoreSlim não pode ser usado para sinalização entre processos.

A razão para a melhoria de desempenho é que a classe SemaphoreSlim oferece uma alternativa leve à classe Semaphore, que não utiliza o semáforo do kernel do Windows. Basicamente, se você não precisa nomear semáforos, use a classe SemaphoreSlim.

SemaphoreSlim é baseado em SpinWait e Monitor, então uma thread esperando para obter um lock consome um período de ciclos de CPU, esperando adquirir o lock antes de dar lugar a outra thread. Se isso não acontecer, a thread permite que o sistema troque o contexto e tente novamente quando o sistema operacional agendar essa thread novamente (consumindo alguns ciclos da CPU). Se a espera for longa, esse modo pode consumir muitos ciclos de CPU. Então, o melhor cenário para essa implementação é que, na maioria das vezes, não há tempo de espera e você pode conseguir o bloqueio quase imediatamente.
O semáforo depende de implementações no kernel do sistema operacional, então cada vez que um lock é adquirido, leva vários ciclos de CPU, mas depois disso a thread simplesmente hiberna para obter o tempo necessário para obter o lock.

Documentação de Semáforo:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
Documentação do SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Antes de executar o método, os métodos de espera mais comuns são os seguintesLigue de acordo com a situação real do seu próprio negócio

Wait(): Bloqueia o thread até que ele possa entrar em SemaphoreSlim.
Espere(0): O método não será bloqueado. Ele testa o estado da alça de espera e retorna imediatamente.
Esperar: Bloqueia a thread atual até que ela possa entrar no SemaphoreSlim, enquanto especifica um timeout usando um inteiro assinado de 32 bits.

O código-fonte é o seguinte:

As renderizações são as seguintes:







Anterior:Login Sem Segredo (ssh) ou Cópia Sem Segredo (scp) do Linux para outros servidores
Próximo:O Linux usa o lookbusy para simular o uso da CPU
Publicado em 19/02/2022 23:16:57 |
Aprenda a aprender...
Publicado em 20/02/2022 22:19:24 |
teste
 Senhorio| Publicado em 18/12/2024 20:40:10 |
A diferença entre ManualResetEvent e AutoResetEvent aprendido por threads C#
https://www.itsvse.com/thread-4810-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com