Лабораторные работы по информатике
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса)

Отчет о выполнении лабораторной работы по дисциплине: «Параллельные и распределенные вычисления» Тема: «Исследование средств организации подпроцессов»

Цель работы:

Исследовать возможности, предоставляемые системой программирования JAVA для организации параллельно исполняющихся ветвей программы.

Задание на лабораторную работу

1. Разработать в соответствии с вариантом задания программу, создающую два независимых подпроцесса.

2. Исследовать поведение программы при различных значениях приоритетов подпроцессов, влияние временных задержек и средств явной передачи управления.

3. Проанализировать полученные результаты.

Тип первого процесса

Тип второго процесса

12

3

4

3) Вычисление среднего арифметического значения ряда натуральных чисел

6) Вычисление факториала заданного числа

Текст программы

class LAB1 implements Runnable

{

int a, b,c, d;

LAB1()

{

Thread t1 = new Thread(this, "Thread 1");

System. out. println("Thread created: " + t1);

t1.start();

Thread t2 = new Thread(this, "Thread 2");

System. out. println("Thread created: " + t2);

t2.start();

try

{

t1.join();

t2.join();

}

catch (InterruptedException e)

{

System. out. println("interrupted");

}

System. out. println("exiting main thread");

}

int average(){

a=(int)(Math. random()*100);

b=(int)(Math. random()*100);

c=(int)(Math. random()*100);

d=(int)(Math. random()*100);

int average = (a+b+c+d)/4;

return average;

}

long factR(int n){

long r=1L;

if (n>1) r=n*factR(n-1);

return r;

}

int fib(int n) {
 if (n < 2) return 1;
 return fib(n-2) + fib(n-1);
 }

public void run()

{

Thread t = Thread. currentThread();

for (int i = 1; i <= 1000; i++)

{

String s=t. getName();

int n=(int)(Math. random()*10);

if (s. equals("Thread 1")) System. out. println("Подпроцесс вычисления среднего арифметического чисел - " +average() );

else System. out. println("Подпроцесс вычисления факториала заданного числа "+ " - " + n+ " = "+ fib(n));

}

System. out. println("exiting "+t. getName());

}

public static void main(String args[])

{

new LAB1();

}

}

Тестирование программы и анализ полученных результатов

1) При запуске программы с небольшим числом выполнения подпроцессов получили результат:

При запуске программы с небольшим числом выполнения подпроцессов

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

Видно, что в Java при равных приоритетах подпроцесс, объявленный первым и стартует первым, второй же подпроцесс находится в режиме ожидания.

2) Изменим программу, увеличив приоритет второго подпроцесса:

Thread t2 = new Thread(this, "Thread 2");

t2.setPriority(Thread. NORM_PRIORITY+2);

System. out. println("Thread created: " + t2);

t2.start();

Первым в работу вступил второй подпроцесс,

второй подпроцесс

В случае неравенств приоритетов выполнения замечаем, что в первую очередь к общему ресурсу будет допущен подпроцесс с большим приоритетом.

3) Добавим временную приостановку процесса в метод run.

public void run()

{

Thread t = Thread. currentThread();

for (int i = 1; i <= 1000; i++)

{

try

{

t. sleep(100);

}

catch (InterruptedException e)

{

System. out. println("interrupted");

}

}

System. out. println("exiting "+t. getName());

}

Случай равных приоритетов подпроцессов:

Случай равных приоритетов подпроцессов

Подпроцессы работают попеременно, но первым начал свою работу первый.

Случай неравных приоритетов (приоритет второго подпроцесса выше):

Случай неравных приоритетов

Аналогично предыдущему опыту, только за счет большего приоритета выполнение второго подпроцесса началось и закончилось раньше.

4) Модифицируем метод run так, чтобы подпроцесс на каждой итерации явно оcвобождал процессор:

public void run()

{

Thread t = Thread. currentThread();

for (int i = 1; i <= 1000; i++)

{

System. out. println(t. getName()+" " + i);

t. yield();

}

System. out. println("exiting "+t. getName());

}

Случай равных приоритетов:

Случай равных приоритетов:

Вначале чаще выполняются операции в первом потоке, но постепенно ситуация стабилизируется и процессор одинаково разделяет общий поток для выполнения каждого подпроцесса.

Случай неравных приоритетов (приоритет второго подпроцесса выше):

Случай неравных приоритетов (приоритет второго подпроцесса выше)

В данном случае второй подпроцесс редко освобождает процессор для работы первого подпроцесса в связи с более высоким приоритетом на выполнение.

Вывод: на лабораторной работе исследовал возможности, предоставляемые системой программирования JAVA для организации параллельно исполняющихся ветвей программы, разработал в соответствии с вариантом задания два независимых подпроцесса, исследовал поведение программы при различных значениях приоритетов подпроцессов, влияние временных задержек и средств явной передачи управления.

Добавить комментарий


Защитный код
Обновить

По темам:

История Украины

Культурология

Высшая математика

Информатика

Охотоведение

Статистика

География

Военная наука

Английский язык

Генетика

Разное

Технологиеские темы

Украинский язык

Филология

Философия

Химия

Экология

Социология

Физическое воспитание

Растениевосдство

Педагогика

История

Психология

Религиоведение

Плодоводство

Экономические темы

Бухгалтерские темы

Маркетинг

Иностранные языки

Ветеринарная медицина

Технические темы

Землеустройство

Медицинские темы

Творчество

Лесное и парковое хозяйство

Агрономия

Преподавателям

Юридические темы

Google