Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
02.05.2014
Размер:
559.62 Кб
Скачать

Алгоритм a232: Параллельная конъюнкции трех команд

          1. Исходное общее описание алгоритма

СФА: Структурная формула алгоритма

Алгоритм этапа обработки (основного перехода тех. операции):

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

          1. Многопоточные представления

СФА: Структурная формула алгоритма

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( ))

          1. Исходный текст программной реализации

ВИ: Вертикальное исполнение

Первичное решение

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) // задержка для разгрузки процессора

15

Соседние файлы в папке Расчетно-графическая работа1