MaximGB писал(а):
Я говорил что нужно явное указание места где параллельное выполнение завершается,
таким образом снимается возможное двоякое трактование силуэта
(это я про то сколько раз и кем будет выполнено действие Д6 в примере Эдуарда).
Согласен:
Цитата:
нужно явное указание места где параллельное выполнение завершается
Но далее
Цитата:
таким образом снимается возможное двоякое трактование силуэта
(это я про то сколько раз и кем будет выполнено действие Д6 в примере Эдуарда)
также согласен в отношении "двоякого токования", но немного по другим причинам.
Далее не буду навязывать никому свое мнение, но как будущий (в скором времени, надеюсь)
пользователь дракон-редакторов (а по дракон-методологии уже пользователь - в разных отношениях)
принимаю (для своих приложений) следующие установки - имею право.
Для начала привожу первообразную схему данной темы:
Вложение:
pp0''-ПарМарш.PNG [ 33.73 КБ | Просмотров: 8019 ]
Пунктиром выделены параллельные маршруты - в обычном первобытном понимании:
(Д2-Д4) и (Д3-Д5).
Я не спроста несколько выше задал вопрос типа: что значит "расшивка параллельных маршрутов"?
1) Выделение параллельных маршрутов, то есть их выноска в две отдельные связные ветки?:
отдельно и связно (Д2-Д4) + отдельно и связно (Д3-Д5).
2) Разделение (разложение) параллельных ветвей на элементарные операторы
и выкусывание хвостов (в данном случае Д4, Д5) в отдельные ветки (как в силуэте PP.png).
Первая задача более общая - это попутное замечание.
Далее приводится еще более общая задача - взятая за основу:
с поперечным сечением в параллельном участке и с раздельным отображением 2-х фрагментов общей схемы.
Вложение:
pp4'''-ПарМарш.png [ 58.19 КБ | Просмотров: 8019 ]
MaximGB писал(а):
Предложение andr с одной горизонтальной чертой не плохо,
но он не учитывает что алгоритмы параллельных процессов могут быть более сложными и сами состоять из нескольких веток.
Это не я ее предложил - она появилась по ходу выкладок.
Да, действительно, может быть вложенный параллелизм, и он может быть отображен
аналогичным образом и с применением общего поперечного сечения - в этой более общей задаче.
Я привожу эту схему в доработке, в частности:
узел слияния параллельных ветвей (
o) показан не одной поперечной линией, а двумя - как и узел распараллеливания (
#).
Здесь используются такие аргументы:
1)
Основная идея отображения параллелизма исторически была такая:
наглядное выделение параллельных участков схемы (с параллельными продольными ветвями)
между парными поперечными линиями на границах участков.
2) Но в принципе парные поперечные линии на границах таких участков использовать
не обязательно:
это только дополнительное
средство повышение наглядности и читабельности схем.
3) Целесообразно (логично):
--
либо использовать парные поперечные линии и на входе параллельного участка
(на разделении потоков "
#") и на выходе (на слиянии потоков "
o");
--
либо их не использовать и на входе и на выходе - и использовать одинарные поперечные линии.
4) Для других вариантов сочетаний (один узел -двойной линий, а другой - одинарной линией) логика не понятна:
необходимо дополнительное обоснование (и запоминание) - с возможной путаницей.
Далее идут следующие аргументы:
5) Традиционно узел слияния параллельных ветвей (обозначен на схеме малым кругом "
o")
выполняет
функции конъюнкции - логической операции
И,
And (
o = &), которая:
-- контролирует окончание работы всех параллельных ветвей;
-- срабатывает не выход (передает управление далее)
после окончания выполнения последней во времени параллельной ветви
(возможно одновременное окончание).
Это, условно,
параллельная конъюнкция операторов параллельных ветвей.
6 ) Если есть параллельная конъюнкция, то теоретически может быть
параллельная дизъюнкция:
o = V - логическая операция
Или,
Or, которая:
-- контролирует окончание работы первой во времени параллельной ветви;
-- и срабатывает на выход (предает управление далее)
после окончания выполнения этой первой во времени ветви.
Более позднее окончание работы других параллельных ветвей этой схемой не контролируется
(но это можно обеспечить другими средствами - при необходимости).
7) Параллельная дизъюнкция - это относительно новая,
более проблемная и менее освоенная алгоритмическая сущность.
Но она уже давно используется в операционных системах (в разных операторах с дополнительными функциями),
и постепенно проникает в разные языки параллельного программирования.
8 ) Если на схемах
не указывается тип узла слияния параллельных ветвей,
по умолчанию предполагается параллельная конъюнкция (
o = V).
Это массовое традиционное применение параллелизма
(обычно на интуитивном уровне понимания структурной логики его работы).
9) Если необходимо использовать параллельную дизъюнкцию,
то необходимо как-то
различать эти два вида замыкания параллельных ветвей,
например надписями типа
o = & и
o = V (или просто надписями &, V).
10) Концепция силуэта фактически вводит в алгоритмическую практику
концепцию виртуальной общей шины для упрощения множественных адресных связей разных схемных фрагментов.
Это широко используется в схемотехнике, но в алгоритмике мне, по крайней мере, как то не попадалась на глаза
(или не обращал внимания - это было давно, рисовали блок-схемы на ватмане формата А3 и А2).
В принципе можно без нее можно обойтись, ограничившись только адресными метками
на входных и выходных пентагонах веток схемы:
это условно показано на последней схеме pp4''' (пробелами связей) - наружный контур можно удалить.
Но он имеет определенное многоаспектное организующее значение:
есть информация к размышлению.
И кроме того его, в принципе, можно с пользой применить для логических схем алгоритмов
(особых стрелочных структурных формул алгоритмов - с адресными связями стрелок) типа:
Вложение:
LSA-01.pdf [151.76 КБ]
Скачиваний: 315
или
Вложение:
LSA-02.pdf [202.86 КБ]
Скачиваний: 415
Тоже есть информация к размышлению.