Решение задачи "производитель-потребитель"

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

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 24.08.2014
Размер файла 12,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru

Министерство образования и науки Украины

Севастопольский Национальный технический Университет

Кафедра кибернетики и вычислительной техники

Лабораторная работа

по дисциплине Параллельные и распределенные вычисления

Решение задачи «производитель-потребитель»

Выполнил:

ст. группы М-34д

Ярославцев Д.А.

Проверил:

Семанин А.В.

Севастополь, 2010

1. Исходные данные

программирование java процессорный

Цель:

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

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

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

Исследовать поведение программы при использовании различных методов синхронизации.

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

Генерация последовательности случайных чисел.

Нормализация (округление до заданного порога) элементов последовательности.

2. Ход работы

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

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

Приводим результаты исполнения:

707 Put: 0.7972708552464846

Got: 0.79728

708: 0.6708684380841723

Очевидно, применение пустого цикла (активное ожидание) приводит к непроизводительным затратам процессорного времени.

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

Thread.yield():

Got: 0.86931

1264 Put: 0.6730463417198717

Got: 0.67305

1265 Put: 0.9346496969327741

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

Перейдем к использованию средств синхронизации, предоставляемых Java. Каждый объект в Java можно использовать в режиме взаимного исключения (заблокировать).

Для того, чтобы воспользоваться механизмом блокировок, используется ключевое слово synchronized. Для блокировки метода это ключевое слово указывается как модификатор в заголовке. Для блокировки полей и методов конкретного объекта используется следующая конструкция:

synchronized (object) {...}

Кроме этого, каждому объекту можно сопоставить свою очередь ожидания.

Подпроцесс, вызвавший метод wait() любого объекта попадает в эту очередь и будет активизирован, если другой подпроцесс вызовет метод этого же объекта notifyAll() (освободить все подпроцессы) или, если повезет, Notify() (освободить один подпроцесс).

Приведем пример исполнения программы с использованием synchronized:

21191 Put: 0.2927775831328753

Got: 0.29278

21192 Put: 0.9075646994068512

Got: 0.90757

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

В заключение, воспользуемся классическим механизмом синхронизации - семафорами. Соответствующий класс в Java описан в пакете java.util.concurrent.

Задействуем два семафора с именами emp и ful. Первый, если он открыт, сигнализирует, что общая область пуста. Второй, соответственно, означает, что в общей области есть данные. Классическим примитивам P(S) и V(S) соответствуют методы acquire() и release(). Начальное значение семафора задается параметром конструктора.

Приведем пример исполнения модифицированной программы:

19174 Put: 0.9676442535665982

Got: 0.96765

19175 Put: 0.7794185957599649

Got: 0.77942

В результате последнего теста количество итераций методов весьма превосходит количество, полученное при использовании активного ожидания и метода передачи процессорного времени. Однако лучшим методом для данного примера оказалось использование ключевого слова synchronized.

Выводы

Выполнив работу, я исследовал возможности, предоставляемые системой программирования JAVA для синхронизации взаимодействующих параллельных процессов. По эффективности методы регулировки выстроились следующей цепочкой: метод добавления дополнительной логической переменной; непосредственное освобождение потока, метод подключения семафоров, а наилучшим вариантом оказалось использование методов notify(), wait() и ключевого слова synchronized.

Размещено на Allbest.ru

...

Подобные документы

  • Формирование устойчивой последовательности псевдослучайных чисел с использованием метода "середины квадрата". Разработка программы для определения среднего значения чисел, среднего значения квадратов чисел и дисперсии для последовательности из 20 чисел.

    лабораторная работа [1,4 M], добавлен 21.01.2015

  • Способы получения случайных чисел в программировании и их использование для решения ряда задач. Принцип действия и тестирование работы генератора случайных чисел в Borland C++, его преимущества. Генерация одномерной и двумерной случайной величины.

    лабораторная работа [105,4 K], добавлен 06.07.2009

  • История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.

    курсовая работа [795,9 K], добавлен 14.12.2012

  • Проектирование датчика случайных чисел, пригодного для моделирования случайной последовательности с заданным законом распределения. Методы моделирования. Разработка алгоритма и программы датчика. Исследование свойств выработанной им последовательности.

    лабораторная работа [124,2 K], добавлен 15.06.2010

  • Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.

    курсовая работа [172,4 K], добавлен 23.05.2012

  • Структура и функции генератора случайных чисел. Методы предельного уменьшения ошибки второго рода. Усиление шумового сигнала. Его дискретизация по времени и аналого-цифровое преобразование. Формирование случайной последовательности и ее корреляция.

    курсовая работа [299,4 K], добавлен 11.12.2014

  • Особенности построения программ реального времени на основе параллельных процессов. Реализация простой программы, которая выводит на экран текст приветствия и завершается. Создание массива из трехсот параллельных процессов, получающих уникальный индекс.

    статья [19,8 K], добавлен 08.12.2016

  • Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.

    курсовая работа [276,1 K], добавлен 19.07.2014

  • Описание конструкций языка программирования Паскаль, обеспечивающих ветвление. Организация циклических процессов. Создание программы для ввода последовательности вещественных чисел до появления 0, расчет среднего арифметического данной последовательности.

    лабораторная работа [189,8 K], добавлен 17.04.2012

  • Применение случайных чисел в моделировании, выборке, численном анализе, программировании и принятии решений. Понятие равномерного распределения вероятности. Способы получения последовательности. Правила выбора модуля. Критерий Колмогорова-Смирнова.

    курсовая работа [1,3 M], добавлен 17.03.2011

  • Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.

    курсовая работа [1,8 M], добавлен 16.09.2015

  • Язык Java как простой, обьектно-ориентированный, многопоточный язык программирования, разработанный компанией Sun Microsystems для расширения возможностей сети Internet. Типы данных, лексика и управляющие структуры данного языка программирования.

    презентация [46,1 K], добавлен 25.04.2014

  • Сущность и особенности выполнения метода динамического программирования. Решение математической задачи, принцип оптимальности по затратам, ручной счёт и листинг программы. Применение метода ветвей и границ, его основные преимущества и недостатки.

    курсовая работа [38,9 K], добавлен 15.11.2009

  • Решение задачи линейного программирования графическим методом, его проверка в MS Excel. Анализ внутренней структуры решения задачи в программе. Оптимизация плана производства. Решение задачи симплекс-методом. Многоканальная система массового обслуживания.

    контрольная работа [2,0 M], добавлен 02.05.2012

  • Разработка графического редактора для рисования двухмерной и трехмерной графики, используя язык программирования Java и интерфейсы прикладного программирования Java 2D и Java 3D. Создание графического редактора 3D Paint. Основные методы класса Graphics.

    курсовая работа [197,5 K], добавлен 19.11.2009

  • Постановка линейной целочисленной задачи. Метод отсекающих плоскостей. Дробный алгоритм решения полностью целочисленных задач. Эффективность отсечения Гомори. Сравнение вычислительных возможностей метода отсекающих плоскостей и метода ветвей и границ.

    курсовая работа [178,2 K], добавлен 25.11.2011

  • Общая характеристика и оценка возможностей языка программирования си-шарп, его сходные и отличительные черты от С++ и Java. Разработка с помощью данного языка программирования лексического и синтаксического анализатора. Составление таблиц разбора.

    курсовая работа [111,6 K], добавлен 11.06.2010

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

    курсовая работа [333,5 K], добавлен 21.01.2013

  • Характеристика вероятностного алгоритма и особенности его использования. Принцип работы и назначение генератора случайных чисел, сущность псевдослучайных чисел. Рассмотрение и реализация метода середины квадрата, разработка алгоритма и его кодирование.

    курсовая работа [50,3 K], добавлен 18.09.2009

  • Построение математической модели. Выбор, обоснование и описание метода решений прямой задачи линейного программирования симплекс-методом, с использованием симплексной таблицы. Составление и решение двойственной задачи. Анализ модели на чувствительность.

    курсовая работа [100,0 K], добавлен 31.10.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.