- •Лабораторна робота №2.
- •Приклад документованого тексту програми.
- •Виклик утiлiти Javadoc з командного рядка.
- •Завдання:
- •Лабораторна робота №3.
- •Теоретичнi вiдомостi.
- •Завдання
- •Iндивiдуальнi завдання до захисту роботи
- •Лабораторна робота №4.
- •Теоретичнi вiдомостi.
- •Завдання
- •Iндивiдуальнi завдання до захисту роботи
- •Рекурсивна версiя засувки
- •Завдання
- •Iндивiдуальнi завдання до захисту роботи
- •Використання семафорiв для сигналiзацiї
- •Рахуючий семафор
- •Обмежуючий семафор
- •Потоки стандартного вводу / виводу
- •Стандартний поток виводу System.Out
- •Стандартний поток вводу System.In
- •Стандартний поток помилок System.Err
- •Потоки вводу / виводу пакету java.Io
- •Файловий ввод / вивід
- •Рядковий ввод / вивід
- •Завдання:
- •Опанувати методику створення розподiлених програм з використанням часової синхронiзацiї паральних потокiв.
- •Приклад використання класу CountDownLatch
- •Опанувати методику створення розподiлених програм з використанням часової синхронiзацiї паральних потокiв.
- •Приклад вiдстеження моменту закiнчення роботи декiлькох потокiв
- •Завдання:
- •Опанувати методику створення розподiлених програм з використанням обмiнникiв.
- •Завдання:
- •Iндивiдуальнi завдання до захисту роботи
- •Мережі і сокети
- •Приклад: віддалене читання файлу
- •Сервер читання файлів мовою Java
- •Клієнт читання файлів мовою Java
- •Порядок компіляції та запуску програм
- •Завдання:
- •Контрольні питання:
- •Iндивiдуальнi завдання до захисту роботи
- •Опанувати методику створення розподiлених програм з використанням конвейеру команд.
- •Опанувати методику побудови моделi обчислень у виглядi графа "операцiї-операнди".
- •Приклад паралельного алгоритму для обчислення площi прямокутника
- •Завдання:
- •Iндивiдуальнi завдання до захисту роботи
- •Опанувати методику створення розподiлених програм з використанням портфеля задач.
- •Приклад використання портфеля задач за допомогою ExecutorService.
- •Завдання:
- •Iндивiдуальнi завдання до захисту роботи
- •Опанувати методику створення розподiлених програм з використанням бар'єрної синхронiзацiї.
- •Приклад використання бар'ера
- •Завдання:
- •Iндивiдуальнi завдання до захисту роботи
- •Опанувати методику синхронiзацiї паральних процесiв з використанням блокуючої черги.
- •Приклад реалiзацiї блокуючої черги
- •Приклад використання блокуючої черги
- •Завдання:
- •Iндивiдуальнi завдання до захисту роботи
- •Вимоги до звiту
- •Iндивiдуальнi завдання для самостiйної роботи
- •Вимоги до звiту
- •Iндивiдуальнi завдання для самостiйної роботи
- •Вимоги до звiту
- •Iндивiдуальнi завдання для самостiйної роботи
- •Додатковi завдання для пiдвищення балiв з курсу “Паралельне програмування”
Завдання:
Розглянути, вiдкомпiлювати та запустити на виконання наведенi приклади.
З'ясувати принципи взємодiї та синхронiзацiї потокiв при використаннi обмiнникiв.
З'ясувати особливостi програмування та застосування обмiнникiв.
Iндивiдуальнi завдання до захисту роботи
Створити три процеси та органiзувати обмiн даними мiж ними за топологiєю "Лiнiйка". Тобто перший процес передає данi другому, а другий - третьому.
Створити три процеси та органiзувати циклiчний обмiн даними мiж ними. Тобто перший потiк повинен передавати дани до другого, другий - до третього, а третiй - до першого.
Створити чотири процеси та органiзувати обмiн даними мiж ними за топологiєю "Зiрка". Тобто один (головний) процес повинен роздати данi iншим трьом (пiдлеглим) процесам.
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = 1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / x))).
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * (1 + a * (1 + a * (1 + a * (1 + a)))).
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * x / (a * x / (a * x / (a * x))).
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a / (x + a / (x + a / (x + a / (x + a / x)))).
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * b / (x + a * b / (x + a * b / (x + a * b / (x + a * b / x)))).
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = 1 + (1 + (1 + (1 + x) / x) / x) / x.
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = 2 * (2 * (2 * (2 * x - 1) * x - 1) * x - 1) * x - 1.
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a / (a / (a / (a / x - b) - b) - b) - b.
Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * (b / (a * (b / (a * (b / x) + c)) + c)) + c.
Лабораторна робота №11.
Тема: Розподілене програмування на мовi Java з використанням механiзму Sockets.
Мета: Опанувати методику створення розподілених програм з використанням механізму Sockets.
Теоретичні відомості.
Розподілене програмування мовою Java з використанням сокетів
Мова Java підтримує розподілене програмування за допомогою потоків, поділюваних змінних і синхронізованих методів. Тому мову Java можна використовувати для написання розподілених програм. У цій мові немає вбудованих примітивів для передачі повідомлень, але є стандартний модуль java.net. Класи цього модуля підтримують низькорівневу взаємодію, використовуючи дейтаграми, зв'язок більш високого рівня за допомогою сокетів і взаємодію через Internet за допомогою адрес URL (Uniform Resource Locator - уніфікований покажчик інформаційного ресурсу).
Мережі і сокети
Мережа складається з набору вузлів (ведучих комп'ютерів - host), зв'язаних за допомогою комунікаційного простору. Наприклад, локальна мережа може складатися із серверів і робочих станцій, зв'язаних за допомогою Ethernet. Internet - це приклад глобальної мережі, що містить мільйони вузлів і тисячі взаємозалежних мереж. Кожен вузол має унікальне ім'я, тому інші вузли можуть зв'язуватися з ним. Фактично вузли мережі Internet мають по двох унікальних імені: символьне ім'я домена Internet і числова адреса для протоколу IP (Internet protocol).
Програми, що виконуються на різних вузлах, використовують протоколи взаємодії. Таких протоколів існує дуже багато. Вони підтримують різні типи даних (від тексту і графіки до фільмів), різні рівні абстракції (такі як передача файлів або пакетів даних) і різні співвідношення властивостей, наприклад, швидкості і надійності. Системні програмісти звичайно використовують два протоколи - TCP (Transmission Control Protocol - протокол керування передачею) і UDP (User Data Protocol - протокол даних користувача). Ці протоколи звичайно реалізовані на основі протоколу IP (Internet Protocol), що, у свою чергу, заснований на апаратних протоколах, таких як драйвер Ethernet. З іншого боку, на основі протоколу TCP реалізовані високорівневі протоколи передачі файлів (file transfer protocol - FTP) і передачі гіпертекстів (hypertext transfer protocol - HTTP).
Взаємодія за протоколом TCP грунтується на з'єднаннях і потоках. З'єднання - це зв'язок між двома вузлами, що встановлюється перед процесом взаємодії й існує до його завершення. З'єднання можна представити як “програмний канал” між вузлами. Потік взаємодії - це послідовність повідомлень, переданих по з'єднанню. Потік забезпечує надійну й упорядковану взаємодію, тобто повідомлення не губляться і доставляються в порядку їхнього відправлення. Таким чином, семантично потік збігається з каналом.
Протокол UDP заснований на дейтаграмах. Дейтаграма складається з адреси призначення і невеликого “пакета” даних, що є просто масивом байтів. З'єднання не потрібні, оскільки адреса призначення є в кожної дейтаграмі. Зв'язок за протоколом UDP не надійний, оскільки дейтаграми можуть губитися або приходити не один за одним. З іншого боку, зв'язок за допомогою дейтаграм набагато швидше, ніж зв'язок, заснований на потоках. Таким чином, альтернативність протоколів TCP і UDP пов'язана головним чином з вибором між надійністю і швидкістю.
Модуль java.net містить кілька класів, що підтримують мережну взаємодію за допомогою як дейтаграм, так і потоків. Далі ілюструється використання двох класів, Socket і ServerSocket, що широко використовуються у додатках типу “клієнт-сервер”.
