java - thread - Sincronización de hilos en tiempo real con hilos normales
thread java (3)
¿Cómo se sincronizaría un hilo en tiempo real con un hilo normal en Java? Tomemos, por ejemplo, un hilo en tiempo real que calcula algunas temperaturas y el hilo de la GUI que tiene que recoger esos números y mostrarlos en algunos controles.
La implementación de la biblioteca en tiempo real no debería importar ya que debería seguir las especificaciones.
Necesitarás dos cosas. Desea que su subproceso en tiempo real tenga prioridad, y preferiblemente lo haga funcionar con un temporizador para que pueda obtener mediciones (casi) periódicas. Entonces, vas a querer un recurso que pueda usarse para comunicar los valores. Eso puede ser un monitor simple, con una sección crítica para que el subproceso del temporizador pueda escribir en él, o podría ser, y muy probablemente sería mejor, un FIFO, de modo que el subproceso de la GUI pueda consumir valores siempre que tiene ciclos.
En Java, la GUI (al menos en Swing y similares) ya está ejecutando un hilo separado para las interacciones de UI, por lo que su principal problema es configurar su hilo de medición. Eche un vistazo a Runnables.
Para utilizar subprocesos en tiempo real necesita Java en tiempo real en el sistema operativo en tiempo real. http://java.sun.com/javase/technologies/realtime/index.jsp
Sin embargo, si tiene un hilo sensible a la latencia, le sugiero que lo haga;
- utilice las bibliotecas de concurrencia en las comunicaciones con otros hilos.
- minimizar cualquier actividad de GC (especialmente GC completos)
- no ejecute el hilo en el mismo proceso que una GUI si puede (ya que tiende a tomar muchos recursos de manera que tiene un control limitado)
Como otros mencionaron RTSJ, comentaré que la sincronización entre códigos en tiempo real y no en tiempo real tiene varias soluciones. RTSJ proporciona colas sin espera para dicha comunicación. También es posible construir sobre estas u otras colas y hacer uso de las abstracciones AsyncEvent
y AsyncEventHandler
para gestionar la comunicación. Esto es apropiado para situaciones en las que realmente, realmente, se necesita un comportamiento determinista para el hilo "en tiempo real".
Si puede aceptar el comportamiento de mejor esfuerzo (intente con todas sus fuerzas cumplir sus plazos, pero el mundo no se desmorona si falla), le sugiero que construya cuidadosamente en el marco ejecutor provisto por las utilidades de simultaneidad de Java . Una cuidadosa selección de límites de tareas, una política de colas adecuada (en este caso, "adecuada" dependerá de más detalles sobre su aplicación de los que ha proporcionado), y la política de subprocesos obtendrá lo que necesita.