Владимир Паронджанов писал(а):
andr писал(а):
Здесь, фактически, нет операторов порождения параллельных процессов
В языке ДРАКОН есть операторы порождения параллельных процессов и все остальное, что нужно для алгоритмов реального времени
http://drakon.su/_media/biblioteka_1/03 ... itmy_1.pdf см. стр. 222-226
У меня нумерация страниц в файле и на счетчике на совпадают.
По-видимому, имелось в виду - рис.126:
Вложение:
ПромАлг-07.PNG [ 55 КБ | Просмотров: 4629 ]
Да, именно так это происходит на временных диаграммах.
Основной, в данном случае, родительский поток управления
порождает параллельный ему дочерний поток управления (не по-русски будет сказано).
В языках высокого уровня с низкоуровневым описанием параллелизма может быть оператор типа:
create(thread_name)(в упрощенной записи - синтаксис и лексика могут быть разные).
Причем в общем случае может быть несколько стадий его применения:
-- объявление потока;
-- создание потока:
в оперативной памяти формируется необходимый исполнительный код;
-- запуск (предварительно созданного) потока:
выполняется (параллельная основному потоку) передача управления дочернему потоку - это как раз
стрелочка вниз.
В некоторых языках может быть три в одном.
Возврат из дочернего потока в родительский (
стрелочка вверх) может быть реализован по разному.
Фактически это явный или неявный оператор ожидания некоторого признака окончания дочернего потока типа
wait.
Основой поток приостанавливается, если дочерний поток не завершился
(или проскакивает дальше, если дочерний поток уже завершился).
Это неявная параллельная конъюнкция потоков - по логической операции И (And):
x & y
завершился (событие x) фрагмент основного потока И завершился (событие y) дочерний поток (nane):
-------------------------------
В низкоуровневой реализации параллелизма можно
(почти)
одновременно запустить по отдельности
несколько дочерних потоков.
Для этого необходимо
подряд вставить несколько операторов типа create.
Также по отдельности надо отлавливать завершение этих потоков, например -
подряд идут операторы типа wait (в разном синтаксисе и в разной лексике).
Но суть одна - это многоместная конъюнкция из нескольких двухместных конъюнкций типа:
((x & y) & z) = x & y & z.
----------------------------------
Для высокоуровневого параллельного синтаксиса эти детали обобщаются и скрываются
специальными высокоуровневыми средствами.
На блок-схемах это наглядно отображается
двойными поперечными линиямив начале и конце параллельного участка.
Причем такие высокоуровневые схемы пригодны как для многопоточной и многозадачной реализации,
так и для любых других видов реализации паралелизма,
например циклической прогонкой наборов фрагментов кода многих объектов.
Но на временных диаграммам (и циклограммах) исходная картина сохраняется.
---------------------------------
В разных системах возможна и реализация параллельной дизъюнкции потоков - по логичечкой операции Или (Or) типа:
((x V y) V z) = x V y V z.
В OpenMP/C/C++ для этого используется служебное слово
nowait(но там нужно четко систематически поэкспериментировать относительно дизъюнкции,
я это себе подготовил, но пока руки не доходят).
Но в первом приближении - это (вроде бы) так.
-----------------------------
То есть
в общем случае надо
различать завершение параллельного участка
по конъюнкции & или
по дизъюнкции V (и, в принципе - по
любой булевой функции - но это требует исследования).
По умолчанию - это
конъюнкция (с дизъюнкцией надо поаккуратнее).
Но
уже желательно, все-таки, явное указание конъюнкции, например:
viewtopic.php?p=93285#p93285Это уже необходимо по многим причинам:
не те уже наступают времена, чтобы работать на темной интуиции.
=====================
По представлениям автора поста
параллельные алгоритмы не обязательно увязывать
с интерпретацией
в терминах реального времени.
Например в трудоемких параллельных вычислениях:
1
Прежде всего необходимо корректно реализовать топологическую логику
для любых возможных сочетаний длительности параллельных работ:
здесь критическими являются отношения неполного порядка событий во времени.
2
Если актуальны вопросы производительности (пропускной способности),
то необходимо водить метрики длительности - в их логической комбинаторике
(безотносительно к конкретным временным датам их начала и окончания).
Практически это же относится и к простым задачам параллельного управления технологическим оборудованием.
Простых в том смысле, что не является критичным фактор пропускной способности управляющих микропроцессоров (или управляющего компьютера).
Но если управляющие микропроцессоры или компьютеры захлебываются
в обработке управляющей информации большим числом объектов
или, скажем, одним объектом на космических скоростях в ограниченное время
(это быстропротекающий процесс и составляющие его процессы),
то здесь и появляются задачи систем реального времени.
Но это авторские предположения - здесь он пока не копенгаген:
нет желания бесплатно влезать в новые практические и теоретические дебри.