Exigences : En raison des ressources matérielles limitées, le programme doit consommer une certaine quantité de ressources matérielles ; en cas de forte concurrence, si certaines méthodes qui consomment trop de ressources du programme ne sont pas limitées (exportant une grande quantité de données dans une table Excel), cela peut affecter l’incapacité de l’ensemble du programme à fournir des services normaux, et aussi affecter le fonctionnement normal du système d’exploitation.
Sémaphore et sémaphore Différence mince
SemaphoreSlim et Semaphore sont similaires en termes de fonctionnalités. SemaphoreSlim est environ 4 fois plus rapide que Semaphore, mais SemaphoreSlim ne peut pas être utilisé pour la signalisation interprocessus.
La raison de cette amélioration de performance est que la classe SemaphoreSlim offre une alternative légère à la classe Semaphore, qui n’utilise pas le sémaphore du noyau Windows. En gros, si vous n’avez pas besoin de nommer des sémaphores, utilisez la classe SemaphoreSlim.
SemaphoreSlim est basé sur SpinWait et Monitor, donc un thread en attente d’obtenir un verrouillage consomme une période de cycles CPU, espérant obtenir le verrouillage avant de céder la place à un autre thread. Si cela ne se produit pas, alors le thread laisse le système changer de contexte et réessayer lorsque le système d’exploitation planifie à nouveau ce thread (en consommant quelques cycles CPU). Si l’attente est longue, ce mode peut consommer beaucoup de cycles CPU. Le meilleur scénario pour cette implémentation est que la plupart du temps, il n’y a pas de délai d’attente et que vous pouvez obtenir le verrou presque immédiatement. Le sémaphore repose sur des implémentations dans le noyau du système d’exploitation, donc chaque fois qu’un verrou est acquis, cela prend pas mal de cycles CPU, mais après cela le thread hiberne simplement pour obtenir le temps nécessaire à obtenir le verrouillage.
Documentation du sémaphore :https://docs.microsoft.com/en-us ... aphore?view=net-6.0 Documentation de SemaphoreSlim :https://docs.microsoft.com/en-us ... reslim?view=net-6.0
Avant d’exécuter la méthode, les méthodes d’attente couramment utilisées sont les suivantesAppelez en fonction de la situation réelle de votre entreprise!
Wait() : Bloque le thread jusqu’à ce qu’il puisse entrer dans SemaphoreSlim. Attends(0) : La méthode ne sera pas bloquée. Il testera l’état de la poignée en attente et reviendra immédiatement. Attendez : Bloque le thread courant jusqu’à ce qu’il puisse entrer dans SemaphoreSlim, tout en spécifiant un délai d’attente à l’aide d’un entier signé 32 bits.
Le code source est le suivant :
Les rendus sont les suivants :
|