- •Часть 4
- •Настройка программы
- •Запись комбинаций параметров настройки панели
- •Порядок загрузки параметров
- •Параллельная конъюнкция (#&). Многопоточная программная реализация
- •Этап э2: Тренаж
- •Реализуемые алгоритмы
- •Описание алгоритма
- •Исходный текст программной реализации
- •Исполнение алгоритма
- •Алгоритм a101: Единичный алгоритм
- •Описание алгоритма
- •Исходный текст программной реализации
- •Алгоритм a211: Последовательность двух команд
- •Описание алгоритма
- •Исходный текст программной реализации
- •Алгоритм a222: Параллельная конъюнкция двух команд
- •Исходное общее описание алгоритма
- •Многопоточные представления
- •Исходный текст программной реализации
- •Алгоритм a232: Параллельная конъюнкции трех команд
- •Исходное общее описание алгоритма
- •Многопоточные представления
- •Исходный текст программной реализации
Алгоритм a232: Параллельная конъюнкции трех команд
Исходное общее описание алгоритма
СФА: Структурная формула алгоритма
Алгоритм этапа обработки (основного перехода тех. операции):
A323 = (Z10 & Z2 & Z9) = (Z10 #& Z2 #& Z9) =
= #(Z10, Z2, Z9)& = # Z10, Z2, Z9 &
Алгоритм операционного цикла // включая загрузку и разгрузку
A = (Zz – A323 – Zr) = (Zz – (Z10 & Z2 & Z9) – Zr)
ССА: Структурная схема алгоритма
Вариант 1 Вариант 2
ДИА: Диаграмма исполнения алгоритма: mz10 = 20,mz2 = 100,mz9 = 90
Многопоточные представления
СФА: Структурная формула алгоритма
A323 = (Z10 & Z2 & Z9) = ((Z10 & Z2) & Z9) = ((Z10 #& Z2) #& Z9)
= #(#(Z10,Z2)&,Z9)& = # #Z10,Z2&,Z9&
ССА: Структурная схема алгоритма / Вариант 3
ССА: Структурная схема алгоритма / Вариант 4
Дополнительный поток (thread):
команда Z2, упакованная
в поток
Основной поток (Main)
Дополнительный поток (thread):
команда Z9, упакованная
в поток
Структурные операторы:
FZi = F(Zi) = Fork(Zi) – оператор узла вилки:
упаковка в поток и вызов команды Zi в потоке
J&Zi = J&(Zi) = Join_&(Zi) – оператор узла сборки:
ожидание (wait) завершения команды Zi
ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
ГИ: Горизонтальное исполнение
ШТА: Шаблон текста алгоритма
A323 = ((Z10 & Z2) & Z9) = ((Z10 #& Z2) #& Z9) =
= #(#(Z10, Z2)&, Z9)& = # # Z10, Z2 &, Z9 & =
= # # Z10 Z2 & Z9 & = # # Z10 Z2 & Z9 & = # # Z10 Z2 & Z9 & =
= # FZ2 Z10 J&Z2 Z9 & = # FZ2 Z10 JZ2 Z9 & = # FZ2 Z10 JZ2 Z9 & =
= FZ9 FZ2 Z10 J&Z2 J&Z9 = FZ9 – FZ2 – Z10 – J&Z2 – J&Z9
РТА: Рабочий текст алгоритма
alg A323( ): Fork(Zh9( )); Fork(Zh2( )); Zh10( ); Join_&(Zh2( )) ; Join_&(Zh9( ))
ВИ: Вертикальное исполнение
ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма
A323 = alg A323( ):
| FZ9 Fork(Zh9( ))
| FZ2 Fork(Zh2( ))
| Z10 Zh10( )
| J&Z2 Join_&(Zh2( ))
| J&Z9 Join_&(Zh9( ))
Исходный текст программной реализации
ВИ: Вертикальное исполнение
Первичное решение
def eA323(ccrt, hCycles): // alg A323():
thread.start_new(hCycles.Zh, (ccrt.techsys.head9, )) // Fork(Zh9())
thread.start_new(hCycles.Zh, (ccrt.techsys.head2, )) // Fork(Zh2())
hCycles.Zh(ccrt.techsys.head10) // Zh10()
while not ccrt.techsys.head2.yzh: // Join(Zh2()): ожидание (head2.yzh = 1)
pass // пустой оператор тела цикла
while not ccrt.techsys.head9.yzh: // Join(Zh9()): ожидание (head9.yzh = 1)
pass // пустой оператор тела цикла
Модификация:
введение оператора задержки в циклы ожидания завершения параллельной конъюнкции – для разгрузки процессора.
def eA323(ccrt, hCycles): // alg A323():
thread.start_new(hCycles.Zh, (ccrt.techsys.head9, )) // Fork(Zh9())
thread.start_new(hCycles.Zh, (ccrt.techsys.head2, )) // Fork(Zh2())
hCycles.Zh(ccrt.techsys.head10) // Zh10()
while not ccrt.techsys.head2.yzh: // Join(Zh2(): ожидание (head2.yzh = 1)
time.sleep(0.1) // задержка для разгрузки процессора
while not ccrt.techsys.head9.yzh: // Join(Zh9(): ожидание (head9.yzh = 1)
time.sleep(0.1) // задержка для разгрузки процессора