Tengo una aplicación de un solo proceso y dos hilos. El Tema 1 escuchará un feed de datos de mercado y actualizará la cotización más reciente de miles de acciones. El Subproceso 2 ejecutará un temporizador a una Frecuencia de muestreo y tomará una instantánea de las cotizaciones más recientes para el procesamiento. De hecho, necesito bajar la muestra de un feed de datos de mercado extremadamente rápido.¿Cuál es una forma rápida y eficiente de memoria para pasar datos entre hilos en C#?
Mi primera conjetura sobre una solución es usar un BlockingQueue. Para hacer esto, necesito mover la funcionalidad del temporizador al Hilo 1, lo cual puedo hacer comprobando el reloj cada vez que aparece una actualización de cotizaciones y enviar una instantánea de las cotizaciones a la cola en la Frecuencia de muestreo. Mi preocupación aquí es que la cola consumirá mucha memoria y la recolección de basura disminuirá la velocidad.
Mi segunda suposición es hacer que el subproceso 1 copie los datos en un miembro bloqueado en la frecuencia de muestreo, a la que puede acceder el subproceso 2. Mi preocupación aquí es que los bloqueos serán lentos.
Creo que es necesario hacer que las primitivas de la cita sean volátiles. Dado que un hilo solo se escribe y un hilo solo se lee, ¿puede ser apropiado?
¿Existe una forma de mejores prácticas para comunicar los datos entre los subprocesos para esta aplicación sensible a la latencia? Esta no es una aplicación de frecuencia ultra alta. Puedo tolerar latencias del orden de decenas de ms.
¿Necesitaba bloqueo de lectura en ambos momentos (lectura/escritura)? :) –
@AmarPalsapure ¡Gracias, error de escritura! –
Thx por su respuesta. Probaré los candados para comenzar. ¿Qué piensas sobre el uso de volátiles? –