Requisitos: Debido a los recursos limitados del hardware, el programa necesita consumir cierta cantidad de recursos de hardware; en caso de alta concurrencia, si algunos métodos que consumen demasiados recursos del programa no están restringidos (exportar una gran cantidad de datos a una tabla de Excel), esto puede afectar la incapacidad de todo el programa para proporcionar servicios normales y también el funcionamiento normal del sistema operativo.
Semáforo y SemáforoDiferencia Slim
SemaphoreSlim y Semaphore son similares en funcionalidad. SemaphoreSlim es aproximadamente 4 veces más rápido que Semaphore, pero SemaphoreSlim no puede usarse para señalización entre procesos.
La razón de la mejora de rendimiento es que la clase SemaphoreSlim ofrece una alternativa ligera a la clase Semaphore, que no utiliza el semáforo del kernel de Windows. Básicamente, si no necesitas nombrar los semáforos, usa la clase SemaphoreSlim.
SemaphoreSlim se basa en SpinWait y Monitor, así que un hilo esperando un bloqueo consume un periodo de ciclos de CPU, esperando conseguir el bloqueo antes de dar paso a otro hilo. Si esto no ocurre, el hilo permite que el sistema cambie el contexto y lo intente de nuevo cuando el sistema operativo programe ese hilo de nuevo (consumiendo algunos ciclos de CPU). Si la espera es larga, este modo puede consumir muchos ciclos de CPU. Así que el mejor caso para esta implementación es que la mayoría de las veces no hay tiempo de espera y puedes conseguir el bloqueo casi de inmediato. Semáforo depende de implementaciones en el núcleo del sistema operativo, así que cada vez que se adquiere un bloqueo, se necesitan bastantes ciclos de CPU, pero después el hilo simplemente hiberna para obtener el tiempo que tarda en conseguir el bloqueo.
Documentación de semáforos:https://docs.microsoft.com/en-us ... aphore?view=net-6.0 Documentación de SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0
Antes de ejecutar el método, los métodos de espera más utilizados son los siguientesLlama según la situación real de tu propio negocio!
Wait(): Bloquea el hilo hasta que puede entrar en SemaphoreSlim. Espera(0): El método no será bloqueado. Comprobará el estado del mando en espera y volverá inmediatamente. Espera: Bloquea el hilo actual hasta que pueda entrar en SemaphoreSlim, mientras especifica un tiempo de espera usando un entero con signo de 32 bits.
El código fuente es el siguiente:
Las representaciones son las siguientes:
|