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

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

def eA211(ccrt, hCycles): # alg A211( ):

hCycles.Zh(ccrt.techsys.head7) # Zh7( ) - типовой цикл СГ7

hCycles.Zh(ccrt.techsys.head6) # Zh6( ) - типовой цикл СГ6

РМУ 3.1 Текущее задание:

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

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

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

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

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

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

A = (Zz – A222 – Zr) = (Zz – (Z7 & Z6) – Zr)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

= # Z7Z6 & =#Z7Z6&=#Z7Z6&=

= FZ6Z7JZ6 =FZ6–Z7–J&Z6

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

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

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

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

alg A222 ( ): Fork(Zh6( )); Zh7( ); Join_&(Zh6( ))

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

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

A222 = alg A222( ):

| FZ6 Fork(Zh6( ))

| Z7 Zh7( )

| J&Z6 Join_&(Zh6( ))

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

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

Простой вариант:

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

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)

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

// Выполняется активное ожидание события – процессор занят до конца цикл

Более рациональный вариант:

defeA222(ccrt,hCycles): //algA222():

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) // Задержка повторения цикла:

// Пассивное (почти пассивное) ожидание события:

// процессор освобождается на время задержки

Диспетчер задач ОС Windows

// начальный всплеск – загрузка конфигурации программы

Отработка цикла eA222

На графике отражается этап ожидания завершения параллельной конъюнкции в цикле while.

Реализуется активное ожидание в пустом цикле.

На время ожидания процессор загружается одним потоком на 100%.

Модификация 1 подпрограммы – ввод в цикл оператора задержка

// вместо пустого оператора pass

defeA222(ccrt,hCycles): //algA222():

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через 0.1 сек.

Процессор практически полностью разгружается.

Модификация 2 подпрограммы – вывод сообщения из цикла

на этапе ожидания завершения параллельной дизъюнкции

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

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

print 'yzh6 = 0' // вывод сообщения - работа узла Join

Демонстрация работы цикла ожидания (аналога оператора Join)

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