Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 14970|Respuesta: 3

[Fuente] [Combate real]. NET/C# utiliza SemaphoreSlim para limitar los métodos de ejecución concurrente

[Copiar enlace]
Publicado en 19/2/2022 21:23:20 | | | |
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:







Anterior:Archivos de inicio de sesión sin secretos (ssh) o copia sin secreto (scp) de Linux a otros servidores
Próximo:Linux utiliza lookbusy para simular el uso de la CPU
Publicado en 19/2/2022 23:16:57 |
Aprende a aprender...
Publicado en 20/2/2022 22:19:24 |
prueba
 Propietario| Publicado en 18/12/2024 20:40:10 |
La diferencia entre ManualResetEvent y AutoResetEvent aprendido por hilos de C#
https://www.itsvse.com/thread-4810-1-1.html
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com