Per le applicazioni a thread singolo mi piace usare i diagrammi di classe per avere una panoramica dell'architettura di quell'applicazione. Questo tipo di diagramma, tuttavia, non è stato molto utile quando si è cercato di comprendere applicazioni multithread / simultanee pesantemente, ad esempio perché diverse istanze di una classe "vivono" su thread diversi (il che significa che l'accesso a un'istanza è salvato solo da quello thread su cui vive). Di conseguenza, le associazioni tra le classi non significano necessariamente che posso chiamare metodi su quegli oggetti, ma invece devo effettuare quella chiamata sul thread dell'oggetto di destinazione.
La maggior parte della letteratura che ho approfondito su argomenti come la progettazione di applicazioni simultanee, distribuite e in tempo reale con UML di Hassan Gomaa aveva alcune idee interessanti, come disegnare i confini del filo in diagrammi di oggetti, ma nel complesso sembrava un po 'troppo accademico e prolisso per essere davvero utile.
Non voglio usare questi diagrammi come una visione di alto livello del dominio problematico, ma piuttosto come una descrizione dettagliata delle mie classi / oggetti, delle loro interazioni e delle limitazioni dovute ai limiti del thread che ho menzionato sopra.
Vorrei quindi sapere:
- Quali tipi di diagrammi hai trovato più utili per comprendere le applicazioni multi-thread?
- Esistono estensioni al classico UML che tengono conto delle peculiarità delle applicazioni multi-thread, ad esempio tramite annotazioni che illustrano che
- alcuni oggetti potrebbero vivere in un certo thread mentre altri non hanno affinità di thread;
- alcuni campi di un oggetto possono essere letti da qualsiasi thread, ma scritti solo da uno;
- alcuni metodi sono sincroni e restituiscono un risultato mentre altri sono asincroni che accodano le richieste e restituiscono i risultati, ad esempio tramite un callback su un thread diverso.