Для однопотокових програм я люблю використовувати діаграми класів, щоб отримати огляд архітектури цього додатка. Цей тип діаграм, однак, не був дуже корисним при спробі зрозуміти сильно багатопотокові / одночасні програми, наприклад, тому що різні екземпляри класу "живуть" на різних потоках (тобто доступ до екземпляра зберігається лише від одного нитка, на якій вона живе). Отже, асоціації між класами не обов'язково означають, що я можу викликати методи на цих об'єктах, але замість цього мені потрібно здійснити цей виклик у потоці цільового об’єкта.
Більшість літератури, яку я розкопав на тему, наприклад, " Проектування одночасних, розповсюджених та додатків у режимі реального часу" з UML від Хассана Гомаа, мали деякі приємні ідеї, такі як нанесення меж потоків в діаграми об'єктів, але загалом здавалося, що це занадто академічно і багатослівно, щоб бути дуже корисним.
Я не хочу використовувати ці діаграми як вигляд високого рівня проблемної області, а як детальний опис моїх класів / об’єктів, їх взаємодії та обмежень через межі ниток, про які я згадував вище.
Тому я хотів би знати:
- Які типи діаграм вам виявилися найбільш корисними для розуміння багатопотокових програм?
- Чи є розширення до класичного UML, які враховують особливості багатопотокових програм, наприклад, через анотації, що ілюструють, що
- деякі об'єкти можуть жити в певній потоці, тоді як інші не мають спорідненості до потоку;
- деякі поля об’єкта можуть бути прочитані з будь-якого потоку, але записані лише з одного;
- деякі методи є синхронними і повертають результат, а інші - асинхронні, що отримують запити в чергу і повертають результати, наприклад, через зворотний виклик в іншому потоці.