Für Single-Threaded-Anwendungen verwende ich gerne Klassendiagramme, um einen Überblick über die Architektur dieser Anwendung zu erhalten. Diese Art von Diagramm war jedoch nicht sehr hilfreich, wenn Sie versuchen, Anwendungen mit vielen Threads / gleichzeitigen Threads zu verstehen, zum Beispiel, weil verschiedene Instanzen einer Klasse in verschiedenen Threads "leben" (dh der Zugriff auf eine Instanz wird nur von der einen gespeichert) Faden lebt es weiter). Infolgedessen bedeuten Zuordnungen zwischen Klassen nicht unbedingt, dass ich Methoden für diese Objekte aufrufen kann, sondern dass ich diesen Aufruf für den Thread des Zielobjekts ausführen muss.
Die meiste Literatur, die ich über das Thema wie das Entwerfen von gleichzeitigen, verteilten und Echtzeitanwendungen mit UML von Hassan Gomaa ausgearbeitet habe, hatte einige nette Ideen, wie das Zeichnen von Fadengrenzen in Objektdiagrammen, aber insgesamt schien es ein bisschen zu akademisch und wortreich zu sein wirklich nützlich sein.
Ich möchte diese Diagramme nicht als allgemeine Ansicht der Problemdomäne verwenden, sondern als detaillierte Beschreibung meiner Klassen / Objekte, ihrer Wechselwirkungen und der Einschränkungen aufgrund der oben erwähnten Threadgrenzen.
Ich würde deshalb gerne wissen:
- Welche Diagrammtypen haben sich für das Verständnis von Multithread-Anwendungen als hilfreich erwiesen?
- Gibt es Erweiterungen der klassischen UML, die die Besonderheiten von Multithread-Anwendungen berücksichtigen, z. B. durch Anmerkungen, die dies veranschaulichen?
- Einige Objekte befinden sich möglicherweise in einem bestimmten Thread, während andere keine Thread-Affinität aufweisen.
- Einige Felder eines Objekts können von einem beliebigen Thread gelesen, aber nur von einem Thread beschrieben werden.
- Einige Methoden sind synchron und geben ein Ergebnis zurück, während andere asynchron sind und Anforderungen in die Warteschlange stellen und Ergebnisse beispielsweise über einen Rückruf in einem anderen Thread zurückgeben.