c# multithreading manualresetevent

c# - ManualResetEventSlim recomienda tiempo de espera



multithreading (2)

Esto es lo que encontré y me encantaría que alguien más lo validara, pero esto es lo que encontré al leer la Fuente de referencia para ManualResetEventSlim

ManualResetEventSlim
Está intentando simplemente dormir y obtener un rendimiento basado en el número de procesadores y realizar suspensiones extremadamente cortas (1 ms o 0 ms, según el índice de giro actual). Si aún no ha tenido suficiente tiempo, volverá a usar Monitor.Wait utilizando una nueva versión actualizada del tiempo de espera que se pasó originalmente.

Al pasar 0 para Thread.Sleep alivia su intervalo de tiempo.

ManualResetEvent
Utiliza WaitHandle y llama a métodos nativos para manejar la espera durante el tiempo especificado. Desafortunadamente, soy incapaz de ver lo que está haciendo.

Mi conclusión
"Muy corto" significa solo unos pocos milisegundos.

EDIT: Acabo de encontrar estos que tienen mucha información:

La documentación de MSDN para los estados ManualResetEventSlim

Puede usar esta clase para un mejor rendimiento que ManualResetEvent cuando se espera que los tiempos de espera sean muy cortos.

¿Cuánto dura "muy corto"? ¿En qué punto el beneficio de usar un objeto del kernel con un ManualResetEvent mayor que la sobrecarga de crear instancias?


La escala de la memoria caché de la CPU a la RAM y al núcleo es aproximadamente logarítmica. Digamos que puede hacer 400 ciclos utilizando la memoria caché de la CPU o 20 ciclos de la CPU utilizando la lectura / escritura de RAM o la operación de 1 kernel. Los números dependerán del hardware, es solo una estimación.

Si cree que los tiempos de espera máximos serán inferiores a 6-15 ns (~ 20-50 ciclos de CPU a 3 GHz), es un tiempo de espera pequeño.