Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
7
Добавлен:
02.05.2014
Размер:
513.02 Кб
Скачать
      1. Алгоритм a232: Параллельная конъюнкции трех команд

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

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

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

A323 = (Z7 & Z6 & Z5) = (Z7 #& Z6 #& Z5) =

= #(Z7, Z6, Z5)& = # Z7, Z6, Z5 &

Алгоритм операционного цикла // включая загрузку и разгрузку

A = (Zz – A323 – Zr) = (Zz – (Z7 & Z6 & Z5) – Zr)

ССА: Структурная схема алгоритма

Вариант 1 Вариант 2

ДИА: Диаграмма исполнения алгоритма: mz7 = 60,mz6 = 70,mz5 =50

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

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

A323 = (Z7 & Z6 & Z5) = ((Z7 & Z6) & Z5) = ((Z7 #& Z6) #& Z5)

= #(#(Z7,Z6)&,Z5)& = # #Z7,Z6 &,Z5&

ССА: Структурная схема алгоритма / Вариант 3

ССА: Структурная схема алгоритма / Вариант 4

Дополнительный поток (thread):

команда Z6, упакованная в поток

Основной поток (Main)

Дополнительный поток (thread):

команда Z5, упакованная в поток

Структурные операторы:

FZi = F(Zi) = Fork(Zi) – оператор узла вилки:

упаковка в поток и вызов команды Zi в потоке

J&Zi = J&(Zi) = Join_&(Zi) – оператор узла сборки:

ожидание (wait) завершения команды Zi

ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст

ГИ: Горизонтальное исполнение

ШТА: Шаблон текста алгоритма

A323 = ((Z7& Z6) & Z5) = ((Z7 #& Z6) #& Z5) =

= #(#(Z7, Z6)&, Z5)& = # # Z7, Z6 &, Z5 & =

= # # Z7 Z6 & Z5 & = # # Z7 Z6 & Z5 & = # # Z7 Z6 & Z5 & =

= # FZ6 Z7 J&Z6 Z5 & = # FZ6 Z7 JZ6 Z5 & = # FZ6 Z7 JZ6 Z5 & =

= FZ5 FZ6 Z7 J&Z6 J&Z5 = FZ5 – FZ6 – Z7– J&Z6 – J&Z5

// Рабочий оператор Z6 связывают:

// слева вилка # – переходит в структурный оператор FZ6;

// справа сборка & – переходит в структурный оператор J&Z6.

// Рабочий оператор Z5 связывают:

// слева вилка # – переходит в структурный оператор FZ5;

// справа сборка & – переходит в структурный оператор J&Z5.

РТА: Рабочий текст алгоритма

alg A323( ): Fork(Zh6( )); Fork(Zh6( )); Zh7( ); Join_&(Zh6( )) ; Join_&(Zh5( ))

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

ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма

A222 = alg A222( ):

| FZ5 Fork(Zh5( ))

| FZ6 Fork(Zh6( ))

| Z7 Zh7( )

| J&Z6 Join_&(Zh6( ))

| J&Z5 Join_&(Zh5( ))

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

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

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

def eA323(ccrt, hCycles): // alg A222():

thread.start_new(hCycles.Zh, (ccrt.techsys.head5, )) // Fork(Zh5())

thread.start_new(hCycles.Zh, (ccrt.techsys.head6, )) // Fork(Zh6())

hCycles.Zh(ccrt.techsys.head7) // Zh7()

while not ccrt.techsys.head6.yzh: // Join(Zh2()): ожидание (head6.yzh = 1)

pass // пустой оператор тела цикла

while not ccrt.techsys.head5.yzh: // Join(Zh5()): ожидание (head5.yzh = 1)

pass // пустой оператор тела цикла

Модификация:

введение оператора задержки в циклы ожидания завершения параллельной конъюнкции – для разгрузки процессора.

def eA323(ccrt, hCycles): // alg A222():

thread.start_new(hCycles.Zh, (ccrt.techsys.head5, )) // Fork(Zh5())

thread.start_new(hCycles.Zh, (ccrt.techsys.head6, )) // Fork(Zh6())

hCycles.Zh(ccrt.techsys.head7) // Zh7()

while not ccrt.techsys.head6.yzh: // Join(Zh6(): ожидание (head6.yzh = 1)

time.sleep(0.1) // задержка для разгрузки процессора

while not ccrt.techsys.head5.yzh: // Join(Zh5(): ожидание (head5.yzh = 1)

time.sleep(0.1) // задержка для разгрузки процессора

20

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