- •Млта: математическая логика и теория алгоритмов
- •Описание алгоритма
- •Исходный текст программной реализации
- •Алгоритм a101: Единичный алгоритм
- •Описание алгоритма
- •Исходный текст программной реализации
- •Алгоритм a211: Последовательность двух команд
- •Описание алгоритма
- •Исходный текст программной реализации
- •Алгоритм a222: Параллельная конъюнкция двух команд
- •Исходное общее описание алгоритма
- •Многопоточные представления
- •Исходный текст программной реализации
- •Алгоритм a323: Параллельная конъюнкции трех команд
- •Исходное общее описание алгоритма
- •Многопоточные представления
- •Исходный текст программной реализации
Исходный текст программной реализации
ВИ: Вертикальное исполнение
Простой вариант:
def eA222(ccrt, hCycles): // alg A222():
thread.start_new(hCycles.Zh, (ccrt.techsys.head9, )) // Fork(Zh())
hCycles.Zh(ccrt.techsys.head1) // Zh1()
while not ccrt.techsys.head9.yzh: // Join(Zh3()): ожидание (head1.yzh = 9)
pass // пустой оператор тела цикла
// Выполняется активное ожидание события – процессор занят до конца цикл
Более рациональный вариант:
defeA222(ccrt,hCycles): //algA222():
thread.start_new(hCycles.Zh, (ccrt.techsys.head9, )) // Fork(Zh9())
hCycles.Zh(ccrt.techsys.head1) // Zh1()
while not ccrt.techsys.head9.yzh: // Join(Zh9()): ожидание (head1.yzh = 9)
time.sleep(0.1) // Задержка повторения цикла:
// Пассивное (почти пассивное) ожидание события:
// процессор освобождается на время задержки
Алгоритм a323: Параллельная конъюнкции трех команд
Исходное общее описание алгоритма
СФА: Структурная формула алгоритма
Алгоритм этапа обработки (основного перехода тех. операции):
A323 = (Z1 & Z9 & Z4) = (Z1 #& Z9 #& Z4) =
= #(Z1, Z9, Z4)& = # Z1, Z9, Z4 &
Алгоритм операционного цикла // включая загрузку и разгрузку
A = (Zz – A323 – Zr) = (Zz – (Z1 & Z9 & Z4) – Zr)
ССА: Структурная схема алгоритма
Вариант 1 Вариант 2
ДИА:Диаграмма исполнения алгоритма: mz7 = 30, mz3 = 70, mz1 = 10
Многопоточные представления
СФА: Структурная формула алгоритма
A323 = (Z1 & Z9 & Z4) = ((Z1 & Z9) & Z4) = ((Z1 #& Z9) #& Z4)
= #(#(Z1,Z9)&,Z4)& = # #Z1,Z9&,Z4&
ССА: Структурная схема алгоритма / Вариант 3
ССА: Структурная схема алгоритма / Вариант 4
Основной поток (Main)
Дополнительный поток (thread):
команда Z9, упакованная
в поток
Дополнительный поток (thread):
команда Z4, упакованная
в поток
Структурные операторы:
FZi = F(Zi) = Fork(Zi) – оператор узла вилки:
упаковка в поток и вызов команды Zi в потоке
J&Zi = J&(Zi) = Join_&(Zi) – оператор узла сборки:
ожидание (wait) завершения команды Zi
ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
ГИ: Горизонтальное исполнение
ШТА: Шаблон текста алгоритма
A323 = ((Z1 &Z9) &Z4) = ((Z1 #&Z9) #&Z4) =
= #(#(Z1,Z9)&,Z4)& = # #Z1,Z9 &,Z4 & =
= # # Z1Z9 &Z4 & = ##Z1Z9&Z4 & = ##Z1Z9&Z4 & =
= # FZ9Z1J&Z9Z4 & =#FZ9Z1JZ9Z4&=#FZ9Z1JZ9Z7&=
= FZ4FZ9Z1J&Z9J&Z4 =FZ4 –FZ9 –Z1 –J&Z9 –J&Z4
// Рабочий оператор Z3 связывают:
// слева вилка # – переходит в структурный оператор FZ3;
// справа сборка & – переходит в структурный оператор J&Z3.
// Рабочий оператор Z1 связывают:
// слева вилка # – переходит в структурный оператор FZ1;
// справа сборка & – переходит в структурный оператор J&Z1.
РТА: Рабочий текст алгоритма
alg A323( ): Fork(Zh4( )); Fork(Zh9( )); Zh1( ); Join_&(Zh9( )) ; Join_&(Zh4( ))
ВИ: Вертикальное исполнение
ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма
A323 = alg A323( ):
| FZ4 Fork(Zh4( ))
| FZ9 Fork(Zh9( ))
| Z1 Zh1( )
| J&Z9 Join_&(Zh9( ))
| J&Z4 Join_&(Zh4( ))