Разработка программы, создающей два независимых параллельных подпроцесса, выполняющих простые арифметические задачи
РАЗРАБОТКА ПРОГРАММЫ, СОЗДАЮЩЕЙ ДВА НЕЗАВИСИМЫХ ПАРАЛЛЕЛЬНЫХ ПОДПРОЦЕССА, ВЫПОЛНЯЮЩИХ ПРОСТЫЕ АРИФМЕТИЧЕСКИЕ ЗАДАЧИ
Выполнил:
Ст. группы М-34д
Ярославцев Д. А.
Севастополь
2010
Постановка задачи
Разработать в соответствии с вариантом задания 10 программу, создающую два независимых подпроцесса, первый из которых выполнит вычисление среднего арифметического значения ряда натуральных чисел, второй - вычисление чисел Фибоначчи.
Исследовать поведение программы при различных значениях приоритетов подпроцессов, влияние временных задержек и средств явной передачи управления.
Проанализировать полученные результаты.
Фибоначчи подпроцесс арифметический приоритет
Текст Программы С Комментариями
Class ThreadTest10 implements Runnable {
Final static int iterations=90;
Final static int sleepTime=1;
Boolean yield=false;
Static long n1;
Static long fibsubLast1=0;
Static long fibLast1=1;
ThreadTest10() {
FibsubLast1=0; fibLast1=1; n1=0; //обнуление вспомогательных переменных
Thread t1 = new Thread(this, "Thread 1");
T1.setPriority(priority1);
System. out. println("Thread created: " + t1);
T1.start();
Thread t2 = new Thread(this, "Thread 2");
T2.setPriority(priority2);
System. out. println("Thread created: " + t2);
System. out. println("Thread 2 1"); // первое число Фиббоначчи
T2.start();
Try {t1.join(); t2.join(); } // ожидание окончания работы потоков
Catch (InterruptedException e) {System. out. println("interrupted");}
System. out. println("exiting main thread"); }
Public void run() {
Thread t = Thread. currentThread();
If(t. getName().equals("Thread 1")){
For (int i=1; i<=iterations; i++) { n1+=i;
System. out. println(t. getName()+" " + ((double)n1/(double)i)); // среднее арифметическое
Try{ t. sleep(sleepTime); } catch(Exception e){}
If(yield)t. yield();
}
} else {
For(int i=0;i<iterations;i++){
System. out. println(t. getName()+" " + fib(fibLast1,fibsubLast1)); // Фиббоначчи
Try{ t. sleep(sleepTime); } catch(Exception e){}
If(yield)t. yield();
}
System. out. println("exiting "+t. getName());
}
}
Public static int fibonacci(int n) { return (n<=2?1:fibonacci(n-1)+fibonacci(n-2)); }
Public static long fib(long fibsubLast, long fibLast) {
Long sum=fibsubLast+fibLast;
FibsubLast1=fibLast1;
FibLast=sum;
FibsubLast1=fibsubLast;
FibLast1=fibLast;
Return sum;
}
Public static void main() { new ThreadTest10(); }
}
Протоколы испытаний
При каждом испытании будет получен пример исполнения программы для 90 циклов работы каждого из двух потоков. Для наглядности в отчете представлены наиболее характерные участки выводимого результата. Испытания будем проводить по трем основным направлениям:
- 1. Исследуем поведение программы при различных значениях приоритетов подпроцессов. 2. Исследуем влияние временных задержек. 3. Исследуем влияние средств явной передачи управления.
Каждое испытание будем проводить независимо, т. е. не будет проводиться испытаний с изменением как задержек, так и приоритетов исполнения.
Опыты проводим на 2-хядерном процессоре Intel E6550 2.13 Ghz, под управлением ОС Windows.
Начальным опытом будет вызов обоих потоков с одинаковым приоритетом, без задержек по времени и передачи времени процессора между ними.
Результат (приведен в полном виде):
Thread created: Thread[Thread 1,5,main]
Thread created: Thread[Thread 2,5,main]
Thread 1 1.0
Thread 1 1.5
Thread 1 2.0
Thread 1 2.5
Thread 1 3.0
Thread 1 3.5
Thread 1 4.0
Thread 1 4.5
Thread 1 5.0
Thread 1 5.5
Thread 1 6.0
Thread 1 6.5
Thread 1 7.0
Thread 1 7.5
Thread 1 8.0
Thread 1 8.5
Thread 1 9.0
Thread 1 9.5
Thread 1 10.0
Thread 1 10.5
Thread 1 11.0
Thread 1 11.5
Thread 1 12.0
Thread 1 12.5
Thread 1 13.0
Thread 1 13.5
Thread 1 14.0
Thread 1 14.5
Thread 1 15.0
Thread 1 15.5
Thread 1 16.0
Thread 1 16.5
Thread 1 17.0
Thread 1 17.5
Thread 1 18.0
Thread 1 18.5
Thread 1 19.0
Thread 1 19.5
Thread 1 20.0
Thread 1 20.5
Thread 1 21.0
Thread 1 21.5
Thread 1 22.0
Thread 1 22.5
Thread 1 23.0
Thread 1 23.5
Thread 1 24.0
Thread 1 24.5
Thread 1 25.0
Thread 1 25.5
Thread 1 26.0
Thread 1 26.5
Thread 1 27.0
Thread 1 27.5
Thread 1 28.0
Thread 1 28.5
Thread 1 29.0
Thread 1 29.5
Thread 1 30.0
Thread 1 30.5
Thread 1 31.0
Thread 1 31.5
Thread 1 32.0
Thread 1 32.5
Thread 2 1
Thread 1 33.0
Thread 2 2
Thread 1 33.5
Thread 2 3
Thread 1 34.0
Thread 2 5
Thread 1 34.5
Thread 2 8
Thread 1 35.0
Thread 2 13
Thread 1 35.5
Thread 2 21
Thread 1 36.0
Thread 2 34
Thread 1 36.5
Thread 2 55
Thread 1 37.0
Thread 2 89
Thread 1 37.5
Thread 2 144
Thread 1 38.0
Thread 2 233
Thread 1 38.5
Thread 2 377
Thread 1 39.0
Thread 2 610
Thread 1 39.5
Thread 2 987
Thread 1 40.0
Thread 2 1597
Thread 1 40.5
Thread 2 2584
Thread 1 41.0
Thread 2 4181
Thread 1 41.5
Thread 2 6765
Thread 1 42.0
Thread 2 10946
Thread 1 42.5
Thread 2 17711
Thread 1 43.0
Thread 2 28657
Thread 1 43.5
Thread 2 46368
Thread 1 44.0
Thread 2 75025
Thread 1 44.5
Thread 2 121393
Thread 1 45.0
Thread 2 196418
Thread 1 45.5
Thread 2 317811
Thread 2 514229
Thread 2 832040
Thread 2 1346269
Thread 2 2178309
Thread 2 3524578
Thread 2 5702887
Thread 2 9227465
Thread 2 14930352
Thread 2 24157817
Thread 2 39088169
Thread 2 63245986
Thread 2 102334155
Thread 2 165580141
Thread 2 267914296
Thread 2 433494437
Thread 2 701408733
Thread 2 1134903170
Thread 2 1836311903
Thread 2 2971215073
Thread 2 4807526976
Thread 2 7778742049
Thread 2 12586269025
Thread 2 20365011074
Thread 2 32951280099
Thread 2 53316291173
Thread 2 86267571272
Thread 2 139583862445
Thread 2 225851433717
Thread 2 365435296162
Thread 2 591286729879
Thread 2 956722026041
Thread 2 1548008755920
Thread 2 2504730781961
Thread 2 4052739537881
Thread 2 6557470319842
Thread 2 10610209857723
Thread 2 17167680177565
Thread 2 27777890035288
Thread 2 44945570212853
Thread 2 72723460248141
Thread 2 117669030460994
Thread 2 190392490709135
Thread 2 308061521170129
Thread 2 498454011879264
Thread 2 806515533049393
Thread 2 1304969544928657
Thread 2 2111485077978050
Thread 2 3416454622906707
Thread 2 5527939700884757
Thread 2 8944394323791464
Thread 2 14472334024676221
Thread 2 23416728348467685
Thread 2 37889062373143906
Thread 2 61305790721611591
Thread 2 99194853094755497
Thread 2 160500643816367088
Thread 2 259695496911122585
Thread 2 420196140727489673
Thread 2 679891637638612258
Thread 2 1100087778366101931
Thread 2 1779979416004714189
Thread 2 2880067194370816120
Thread 2 4660046610375530309
Exiting Thread 2
Exiting main thread
1. Исследуем поведение программы при различных значениях приоритетов подпроцессов, повысив приоритет потока 2 на 3 единицы.
Thread created: Thread[Thread 1,5,main]
Thread created: Thread[Thread 2,7,main]
Thread 2 1
Thread 2 1
Thread 2 2
Thread 2 3
Thread 2 5
Thread 2 8
Thread 2 13
Thread 2 21
Thread 2 34
Thread 2 55
Thread 2 89
Thread 2 144
Thread 2 233
Thread 2 377
Thread 2 610
Thread 2 987
Thread 2 1597
Thread 2 2584
Thread 2 4181
Thread 2 6765
Thread 2 10946
Thread 2 17711
Thread 2 28657
Thread 2 46368
Thread 2 75025
Thread 2 121393
Thread 2 196418
Thread 2 317811
Thread 2 514229
Thread 2 832040
Thread 2 1346269
Thread 2 2178309
Thread 2 3524578
Thread 1 1.0
Thread 1 1.5
Thread 1 2.0
Thread 1 2.5
Thread 1 3.0
Thread 1 3.5
Thread 1 4.0
Thread 1 4.5
Thread 1 5.0
Thread 1 5.5
Thread 1 6.0
Thread 1 6.5
Thread 1 7.0
Thread 1 7.5
Thread 1 8.0
Thread 1 8.5
Thread 1 9.0
Thread 1 9.5
Thread 1 10.0
Thread 1 10.5
Thread 1 11.0
Thread 1 11.5
Thread 1 12.0
Thread 1 12.5
Thread 1 13.0
Thread 1 13.5
Thread 1 14.0
Thread 1 14.5
Thread 1 15.0
Thread 1 15.5
Thread 1 16.0
Thread 1 16.5
Thread 1 17.0
Thread 1 17.5
Thread 1 18.0
Thread 1 18.5
Thread 2 5702887
Thread 1 19.0
Thread 2 9227465
Thread 1 19.5
Thread 2 14930352
Thread 1 20.0
Thread 2 24157817
Thread 1 20.5
Thread 2 39088169
Thread 1 21.0
Thread 2 63245986
Thread 1 21.5
Thread 2 102334155
Thread 1 22.0
Thread 2 165580141
Thread 1 22.5
Thread 2 267914296
Thread 1 23.0
Thread 2 433494437
Thread 1 23.5
Thread 2 701408733
Thread 1 24.0
Thread 2 1134903170
Thread 1 24.5
Thread 2 1836311903
Thread 1 25.0
Thread 2 2971215073
Thread 1 25.5
Thread 2 4807526976
Thread 1 26.0
Thread 2 7778742049
Thread 1 26.5
Thread 2 12586269025
Thread 1 27.0
Thread 2 20365011074
Thread 1 27.5
Thread 2 32951280099
Thread 1 28.0
Thread 2 53316291173
Thread 1 28.5
Thread 2 86267571272
Thread 1 29.0
Thread 2 139583862445
Thread 1 29.5
Thread 2 225851433717
Thread 1 30.0
Thread 2 365435296162
Thread 1 30.5
Thread 2 591286729879
Thread 1 31.0
Thread 2 956722026041
Thread 1 31.5
Thread 2 1548008755920
Thread 1 32.0
Thread 2 2504730781961
Thread 1 32.5
Thread 2 4052739537881
Thread 2 6557470319842
Thread 2 10610209857723
Thread 2 17167680177565
Thread 2 27777890035288
Thread 2 44945570212853
Thread 2 72723460248141
Thread 2 117669030460994
Thread 2 190392490709135
Thread 2 308061521170129
Thread 2 498454011879264
Thread 2 806515533049393
Thread 2 1304969544928657
Thread 2 2111485077978050
Thread 2 3416454622906707
Thread 2 5527939700884757
Thread 2 8944394323791464
Thread 2 14472334024676221
Thread 2 23416728348467685
Thread 2 37889062373143906
Thread 2 61305790721611591
Thread 2 99194853094755497
Thread 2 160500643816367088
Thread 2 259695496911122585
Thread 2 420196140727489673
Thread 2 679891637638612258
Thread 2 1100087778366101931
Thread 2 1779979416004714189
Thread 2 2880067194370816120
Thread 2 4660046610375530309
Exiting Thread 2
Thread 1 33.0
Thread 1 33.5
Thread 1 34.0
Thread 1 34.5
Thread 1 35.0
Thread 1 35.5
Thread 1 36.0
Thread 1 36.5
Thread 1 37.0
Thread 1 37.5
Thread 1 38.0
Thread 1 38.5
Thread 1 39.0
Thread 1 39.5
Thread 1 40.0
Thread 1 40.5
Thread 1 41.0
Thread 1 41.5
Thread 1 42.0
Thread 1 42.5
Thread 1 43.0
Thread 1 43.5
Thread 1 44.0
Thread 1 44.5
Thread 1 45.0
Thread 1 45.5
Exiting main thread
2. Исследуем влияние временных задержек, для чего заставим кажды поток ожидать 5 мс перед следующей итерацией (метод "sleep()").
Результат:
Thread 2 267914296
Thread 1 20.5
Thread 2 433494437
Thread 1 21.0
Thread 2 701408733
Thread 1 21.5
Thread 2 1134903170
Thread 1 22.0
Thread 2 1836311903
Thread 1 22.5
Thread 2 2971215073
Thread 1 23.0
Thread 2 4807526976
Thread 1 23.5
Thread 2 7778742049
Thread 1 24.0
Thread 2 12586269025
Thread 1 24.5
Thread 2 20365011074
Thread 1 25.0
Thread 2 32951280099
Thread 1 25.5
Thread 2 53316291173
Thread 1 26.0
Thread 2 86267571272
Thread 1 26.5
Thread 2 139583862445
Thread 1 27.0
Thread 2 225851433717
Thread 1 27.5
Thread 2 365435296162
Thread 1 28.0 Очевидно, что даже при столь небольшой временной задержке ОС позволяет процессору переключиться, таким образом, потоки выполняют задачу с большей степенью параллельности.
3. Исследуем влияние средств явной передачи управления, для чего с помощью метода yield() обеспечим передачу времени процессора от потока, завершившего текущий цикл работы к следующему потоку и наоборот.
Результат:
Thread 1 32.0
Thread 1 32.5
Thread 1 33.0
Thread 1 33.5
Thread 1 34.0
Thread 1 34.5
Thread 2 1
Thread 1 35.0
Thread 2 2
Thread 1 35.5
Thread 2 3
Thread 1 36.0
Thread 2 5
Thread 1 36.5
Thread 2 8
Thread 1 37.0
Thread 2 13
Thread 1 37.5
Thread 2 21
Thread 1 38.0
Thread 2 34
Thread 1 38.5
Thread 2 55
Thread 1 39.0
Thread 2 89
Thread 1 39.5
Thread 2 144 Мы наблюдаем увеличение степени параллельности обработки по сравнению с методом, не использующим средств явной передачи управления, что является вполне ожидаемым явлением.
Выводы
В ходе выполнения лабораторной работы была разработана программа, создающая два независимых параллельных подпроцесса. выполняющих простые арифметические задачи. Поведение программы при различных значениях приоритетов подпроцессов и временных задержках было исследовано на простых тестовых примерах, результаты тестирования следующие: при появлении задержек исполнения либо при явной передаче управления возрастает степень параллельности исполнения процессов. При изменении приоритета исполнения, на крупных примерах заметно "доминирование" исполняемого потока с большим приоритетом.
Похожие статьи
-
Тестирование и отладка программы - Разработка электронного учебного пособия "VBA. Решение задач"
Процесс отладки является неотъемлемой частью создания любой программы. При программировании могут быть допущены ошибки, которые принадлежат к одному из...
-
Расчет затрат на разработку программы Суммарные затраты на разработку программы рассчитываются по следующей формуле: ЗРп = ЗЗп + ЗНак,(1) Где ЗЗп -...
-
Основным достоинством интерфейса Centronics является его стандартность - он есть на каждом компьютере и на всех компьютерах работает одинакового (правда...
-
Капиталовложение, связанные с работой ЭВМ, рассчитывается по формуле: КВЭвм = СЭвм + ЗТ + ЗЗч + ЗМ, (8) Где СЭвм - стоимость ЭВМ (руб.); ЗТ - стоимость...
-
Программирование подключенной к параллельному порту аппаратуры заключается в установке определенных битов в регистрах данных и управления и чтении...
-
Постановка задачи на разработку программного обеспечения Для того чтобы предлагаемая схема была интегрирована в САПР, который не имеет функции интеграции...
-
Множество D с двумя заданными на нем операциями (плюс) и (умножение) называется диоидом, если выполнены следующие аксиомы: § Ассоциативность. §...
-
Сеть Петри это двудольный направленный граф с маркировкой, ребра которого задают причинно-следственные отношения "события-условия" и именуются дугами....
-
Постановка задачи, выбор предметной области Предметная область: "Автомобиль". Создание автомобиля будет состоять из трех этапов: выбор кузова, выбор...
-
Компромиссная система, для удобства восприятия данных человеком и корректной работы компьютера, двоично-десятичная запись чисел. Принцип построения этой...
-
Расчет экономической эффективности внедрения информационной системы произведем на основе метода "потоков платежей" ("Cash Flow") с использованием...
-
Задачи делового процесса, их взаимосвязь Рассмотрим взаимосвязь задач делового процесса "Предоставление услуг" (рис.1),(рис.2). Рис.1. Рис.2. На рисунке...
-
Физическая модель базы данных определяет способ размещения данных в среде хранения и способ доступа к этим данным, которые поддерживаются на физическом...
-
Рисунок 10. Архитектура программы В структуре программы обработки сложноструктурированных данных для научного эксперимента в ИИС "Шлаковые расплавы"...
-
Заключение - Разработка программы для реализации редактора временных графов синхронизации
Результатом выполнения задания является реализованный редактор временных графов синхронизации (класс временных сетей Петри), соответствующий задачам,...
-
Сравнение аналогов - Разработка программы для реализации редактора временных графов синхронизации
Поскольку конечной целью работы был редактор сетей Петри, интегрированный с внешней библиотекой алгебраических вычислений, было рациональным рассмотреть...
-
Составьте программу для реализации графического редактора линий, изображенного на рисунке 1.1.: Рисунок 1.1. - Пример работы Целью данной работы является...
-
С целью более удобного проектирования, настройки, и разделения отдельных исполняемых операций, программа построена на классах, которые взаимодействуют...
-
Распределение задач между процессами - Администрирование параллельных процессов
Распределение подзадач между процессорами является завершающим этапом разработки параллельного метода. Надо отметить, что управление распределением...
-
Программу обработки данных можно запускать как до, так и после включения устройства сопряжения. Перед первым использованием, а также после изменения...
-
Известно, что любые элементы имеют разброс параметров. Поэтому, использование динамического диапазона АЦП может быть неполным или наоборот, может...
-
Полученное по вышеприведенным формулам значение угла сравнивается с заданными величинами запуска и остановки. Программа обеспечивает запуск сканирования...
-
О разработке целевой межвузовской программы (ЦМП) организации ЕСДО Создание и развитие ЕСДО в России будет осуществляться в рамках соответствующей...
-
Моделирование параллельных программ Рассмотренная схема проектирования и реализации параллельных вычислений дает способ понимания параллельных алгоритмов...
-
Взаимодействие задач с PVM - Администрирование параллельных процессов
В системе PVM каждая задача, запущенная на некотором процессоре, идентифицируется целым числом, которое называется идентификатором задачи (TID) и по...
-
Для проверки соответствия требованиям ТЗ, была поставлена задача разработки 3-D модели корпуса Kyocera KD-PB1D79 при помощи системы AutoCAD. В этой части...
-
Синтаксис объявления класса в языке С++ имеет следующий вид: Class<имя класса>: <спецификатор доступа><имя базового класса> { Элементы класса...
-
Руководство оператора - Разработка электронного учебного пособия "VBA. Решение задач"
1.6.2.1 Назначение программы Назначение и функции Основным назначением электронного учебного пособия является помощь студентам БСК при изучении...
-
Выполнение задания осуществлялось на эмуляторе микро ЭВМ СМ - 1800 (Эмулятор Смирнова), установленном на ПК на базе процессора AMD Atlon(tm) X2 240 2.79...
-
Библиотека MSHTML MSHTML (так же известен как Trident) - браузерный движок для Microsoft Internet Explorer. Впервые Trident был реализован в четвертой...
-
Предлагаемая библиотека хранит все данные в отдельных таблицах, таким образом он не обязан использовать ту же СУБД, что и основное приложение. В качестве...
-
Концепция построения программы Список всех классов приведен на рисунке 3.1. Рисунок 3.1 - Диаграмма классов программы В качестве главного класса...
-
Общие сведения о программе Программа разработана для демонстрации возможностей языка C++ и может использоваться для пользователей, которые не знакомы с...
-
Стек технологий При выборе стека технологий основное внимание уделялось следующим факторам, в порядке убывания значимости: § Кроссплатформенность; §...
-
Работа программы представлена на рисунке 2.3 Рис. 2.3 Кодирование и тестирование программы Программа кодировалась на языке Си++, используя библотеку Qt5x...
-
В рамках данной работы по разработке схемотехнического метода повышения сбоеустойивости ПЛИС поставлены следующие задачи: 1. Создание сбоеустойчивой...
-
Выбранные датчики, исполнительные механизмы и их месторасположение, а также структурная схема АСУ ТП производства сухого молока позволяют составить схему...
-
Обоснование выбранного метода При дизайне системы согласно требованиям или при оптимизации существующей необходимо ввести модель, позволяющую не только...
-
Постановка задачи, Описание программы, Алгоритм работы - Алгоритм кодировки RSA
Реализовать клиент серверное приложение для пересылки закодированной информации. В качестве алгоритма реализовать алгоритм RSA. Описание программы...
-
ВВЕДЕНИЕ - Архивация информации и программы-архиваторы
При работе с данными существует возможность порчи или потери информации на магнитном диске, обусловленная физической порчей диска, случайным уничтожением...
Разработка программы, создающей два независимых параллельных подпроцесса, выполняющих простые арифметические задачи