c# - todos - Implementación altamente eficiente de CircularBuffer(seguro para subprocesos y no seguro para subprocesos)
la evaluación de la función requiere que se ejecuten todos los subprocesos entity framework (1)
¿Alguien podría sugerir una buena implementación de CircularBuffer? Necesito versiones "no seguras para subprocesos" y versiones "seguras para subprocesos". Espero las siguientes operaciones:
- Capacidad de proporcionar el tamaño del búfer al crear
- añadiendo elementos
- elementos iterantes
- eliminando elementos mientras iterando
- probablemente quitando elementos
Espero que la implementación sea altamente optimizada en términos de velocidad y memoria usada, tiempos promedio y peores, etc.
Espero que la implementación "no segura para subprocesos" sea extremadamente rápida. Espero que la implementación "segura para subprocesos" sea rápida, probablemente usando "código sin bloqueo" para la sincronización y está bien tener algunas restricciones si esto es necesario para la velocidad.
Si el búfer es demasiado pequeño para almacenar el elemento nuevo (agregado), está bien silenciar el elemento existente o anular la excepción.
¿Debo usar disruptor.net?
Añadiendo enlace a un buen ejemplo de ejemplo Disruptor.NET
No hilo seguro:
System.Collections.Generic.Queue
A salvo de amenazas:
System.Collections.Concurrent.ConcurrentQueue
o
System.Collections.Concurrent.BlockingCollection (que utiliza una cola concurrente por defecto internamente)
Aunque técnicamente no deberías usar el término "hilo seguro". Es simplemente demasiado ambiguo. El primero no está diseñado para ser utilizado simultáneamente por varios subprocesos, el resto sí lo están.