
- •Часть 4
- •Настройка программы
- •Запись комбинаций параметров настройки панели
- •Порядок загрузки параметров
- •Параллельная конъюнкция (#&). Многопоточная программная реализация
- •Этап э2: Тренаж
- •Реализуемые алгоритмы
- •Описание алгоритма
- •Исходный текст программной реализации
- •Исполнение алгоритма
- •Алгоритм a101: Единичный алгоритм
- •Описание алгоритма
- •Исходный текст программной реализации
- •Алгоритм a211: Последовательность двух команд
- •Описание алгоритма
- •Исходный текст программной реализации
- •Алгоритм a222: Параллельная конъюнкция двух команд
- •Исходное общее описание алгоритма
- •Многопоточные представления
- •Исходный текст программной реализации
- •Алгоритм a232: Параллельная конъюнкции трех команд
- •Исходное общее описание алгоритма
- •Многопоточные представления
- •Исходный текст программной реализации
Алгоритм a211: Последовательность двух команд
Описание алгоритма
СФА: Структурная формула алгоритма
Алгоритм этапа обработки (основного перехода тех. операции):
A211 = (Z10–Z2) =Z10–Z2
Алгоритм операционного цикла // включая загрузку и разгрузку
A = (Zz – A211 – Zr) = (Zz – (Z10 –Z2) – Zr) = (Zz – Z10 –Z2 – Zr)
ССА: Структурная схема алгоритма
Вариант 1 Вариант 2
ДИА: Диаграмма исполнения алгоритма: mz10 = 20,mz2 = 100
ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
ГИ: Горизонтальное исполнение
ШТА: Шаблон текста алгоритма
A211 = (Z10–Z2) =Z10–Z2
A211 = Z10–Z2
РТА: Рабочий текст алгоритма
algA211( ):Zh10( );Zh2( )
ВИ: Вертикальное исполнение
ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма
A211 A211= A211= A211= A211= alg A211( ):
=
( ( |
Z10 – | Z10 Zh10( )
( Z10 – |Z10 – |Z2 |Z2Zh2( )
Z10Z2 |Z2
– ) )
Z2
)
Исходный текст программной реализации
ВИ: Вертикальное исполнение
defeA211(ccrt, hCycles): # alg A211( ):
hCycles.Zh(ccrt.techsys.head10) # Zh10( ) - типовой цикл СГ10
hCycles.Zh(ccrt.techsys.head2) # Zh2( ) - типовой цикл СГ2
Алгоритм a222: Параллельная конъюнкция двух команд
Исходное общее описание алгоритма
СФА: Структурная формула алгоритма
Алгоритм этапа обработки (основного перехода тех. операции):
A222 = (Z10&Z2) = (Z10 #&Z2) = #(Z10,Z2)& = #Z10,Z2&
Алгоритм операционного цикла // включая загрузку и разгрузку
A = (Zz – A222 – Zr) = (Zz – (Z10 & Z2) – Zr)
ССА: Структурная схема алгоритма
Вариант 1 Вариант 2
ДИА: Диаграмма исполнения алгоритма: mz10 = 20,mz2 = 100
Многопоточные представления
ССА: Структурная схема алгоритма / Вариант 3
Дополнительный поток (thread):
команда Z2, упакованная
в поток
Основной поток (Main)
Структурные операторы:
FZi = F(Zi) = Fork(Zi) – оператор узла вилки:
упаковка в поток и вызов команды Zi в потоке
JZi= J&Zi = J&(Zi) = Join_&(Zi) – оператор узла сборки:
ожидание (wait) завершения команды Zi
ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
ГИ: Горизонтальное исполнение
ШТА: Шаблон текста алгоритма
A222 = (Z10 &Z2) = (Z10 #&Z2) = #(Z10,Z2)& = #Z10,Z2 & =
= # Z10Z2 & =#Z10Z2&=#Z10Z2&=
= FZ2Z10JZ2 =FZ2–Z10–J&Z2
РТА: Рабочий текст алгоритма
alg A222 ( ): Fork(Zh2( )); Zh10( ); Join_&(Zh2( ))
ВИ: Вертикальное исполнение
ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма
A222 = alg A222( ):
| FZ2 Fork(Zh2( ))
| Z10Zh10( )
| J&Z2Join_&(Zh2( ))
Исходный текст программной реализации
ВИ: Вертикальное исполнение
Простой вариант:
def eA222(ccrt, hCycles): // alg A222():
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 // пустой оператор тела цикла
// Выполняется активное ожидание события – процессор занят до конца цикл
Более рациональный вариант:
defeA222(ccrt,hCycles): //algA222():
thread.start_new(hCycles.Zh, (ccrt.techsys.head2, )) // Fork(Zh2())
hCycles.Zh(ccrt.techsys.head10) // Zh10()
while not ccrt.techsys.head2.yzh: // Join(Zh3()): ожидание (head2.yzh = 1)
time.sleep(0.1) // Задержка повторения цикла:
// Пассивное (почти пассивное) ожидание события:
// процессор освобождается на время задержки