Para aplicaciones de subproceso único, me gusta usar diagramas de clase para obtener una visión general de la arquitectura de esa aplicación. Sin embargo, este tipo de diagrama no ha sido muy útil cuando se trata de comprender aplicaciones con múltiples subprocesos / concurrentes, por ejemplo, porque diferentes instancias de una clase "en vivo" en diferentes subprocesos (lo que significa que el acceso a una instancia se guarda solo desde el único hilo que vive). En consecuencia, las asociaciones entre clases no necesariamente significan que puedo llamar a métodos en esos objetos, sino que tengo que hacer esa llamada en el hilo del objeto de destino.
La mayoría de la literatura que he desenterrado sobre el tema, como Diseño de aplicaciones concurrentes, distribuidas y en tiempo real con UML por Hassan Gomaa, tenía algunas buenas ideas, como dibujar límites de hilos en diagramas de objetos, pero en general parecía demasiado académico y prolijo para Ser realmente útil.
No quiero usar estos diagramas como una vista de alto nivel del dominio del problema, sino como una descripción detallada de mis clases / objetos, sus interacciones y las limitaciones debidas a los límites de los hilos que mencioné anteriormente.
Por lo tanto, me gustaría saber:
- ¿Qué tipos de diagramas le han resultado más útiles para comprender las aplicaciones de subprocesos múltiples?
- ¿Hay alguna extensión de UML clásico que tenga en cuenta las peculiaridades de las aplicaciones de subprocesos múltiples, por ejemplo, a través de anotaciones que ilustran que
- algunos objetos pueden vivir en un determinado hilo mientras que otros no tienen afinidad de hilo;
- algunos campos de un objeto pueden leerse desde cualquier hilo, pero escribirse solo desde uno;
- algunos métodos son síncronos y devuelven un resultado, mientras que otros son asíncronos que obtienen solicitudes en cola y devuelven resultados, por ejemplo, a través de una devolución de llamada en un hilo diferente.