Per le applicazioni a thread singolo mi piace usare i diagrammi delle classi per avere una panoramica dell'architettura di quella applicazione. Questo tipo di diagramma, tuttavia, non è stato di grande aiuto quando si cerca di capire applicazioni pesantemente multi-thread / concomitanti, ad esempio perché istanze diverse di una classe "vivono" su thread diversi (il che significa che l'accesso a un'istanza è salvato solo da quella filo su cui vive). Di conseguenza, le associazioni tra classi non significano necessariamente che io possa chiamare metodi su quegli oggetti, ma invece devo fare quella chiamata sul thread dell'oggetto di destinazione.
La maggior parte della letteratura che ho trovato sull'argomento come Progettazione di applicazioni simultanee, distribuite e in tempo reale con UML di Hassan Gomaa aveva alcune buone idee, come disegnare i confini dei thread in diagrammi degli oggetti, ma nel complesso sembrava un po 'troppo accademico e prolisso per essere davvero utile.
Non voglio usare questi diagrammi come una vista di alto livello del dominio del problema, ma piuttosto come una descrizione dettagliata delle mie classi / oggetti, le loro interazioni e le limitazioni dovute ai limiti dei thread che ho menzionato sopra.
Vorrei quindi sapere:
- Quali tipi di diagrammi hai trovato più utili nella comprensione delle applicazioni multi-thread?
- Esistono estensioni al classico UML che tengono conto delle peculiarità delle applicazioni multi-thread, ad es. attraverso annotazioni che lo illustrano
- alcuni oggetti potrebbero vivere in un determinato 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 ottengono le richieste in coda e restituiscono risultati per esempio tramite una richiamata su un thread diverso.