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:
|