Para aplicativos de thread único, eu gosto de usar diagramas de classes para obter uma visão geral da arquitetura desse aplicativo. Esse tipo de diagrama, no entanto, não tem sido muito útil ao tentar entender aplicativos altamente multithread / simultâneos, por exemplo, porque diferentes instâncias de uma classe "vivem" em diferentes threads (o que significa que acessar uma instância é salvo apenas da única tópico em que vive). Conseqüentemente, associações entre classes não significam necessariamente que eu possa chamar métodos nesses objetos, mas, em vez disso, preciso fazer essa chamada no encadeamento do objeto de destino.
A maior parte da literatura que eu desenterrei sobre o tópico, como Projetando Aplicativos Concorrentes, Distribuídos e em Tempo Real com UML, de Hassan Gomaa, teve algumas boas idéias, como desenhar limites de encadeamentos em diagramas de objetos, mas no geral parecia um pouco acadêmico e prolixo demais para seja realmente útil.
Não quero usar esses diagramas como uma visão de alto nível do domínio do problema, mas como uma descrição detalhada de minhas classes / objetos, suas interações e as limitações devido aos limites de threads que mencionei acima.
Gostaria, portanto, de saber:
- Que tipos de diagramas você achou mais úteis no entendimento de aplicativos multithread?
- Existem extensões para a UML clássica que levam em consideração as peculiaridades de aplicativos multithread, por exemplo, através de anotações que ilustram
- alguns objetos podem viver em um determinado encadeamento, enquanto outros não têm afinidade por encadeamento;
- alguns campos de um objeto podem ser lidos a partir de qualquer thread, mas gravados apenas em um;
- alguns métodos são síncronos e retornam um resultado, enquanto outros são assíncronos que obtêm solicitações enfileiradas e retornam resultados, por exemplo, por meio de um retorno de chamada em um encadeamento diferente.