- •Лабораторна робота №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в з курсу “Паралельне програмування”
Клієнт читання файлів мовою Java
Наступний лістінг містить код клієнта мовою Java. Після зчитування імен вузла і файлу з командного рядка клієнт намагається відкрити з'єднання через сокет з серверним вузлом через порт 9999. Якщо сервер може прийняти з'єднання, клієнт відправляє ім'я файлу filename серверові, одержує рядки файлу і виводить них на дисплей. Якщо виникає виключна ситуація, клієнт виводить повідомлення про помилку і завершує роботу.
import java.io.*; import java.net.*; public class Client { public static void main( String[] args) { try { // прочитати аргументи командного рядка if (args.length != 2) { System.out.println( "Usage: \n java Client localhost a1.txt"); System.exit(1); } String host = args[0]; String filename = args[1]; // відкрити сокет, вхідний і вихідний потоки для нього Socket socket = new Socket( host, 9999); BufferedReader from_server = new BufferedReader( new InputStreamReader( socket.getInputStream())); PrintWriter to_server = new PrintWriter( socket.getOutputStream()); // відправити серверу им'я файлу, а потім читати і // друкувати рялки до закриття з'єднання з сервером to_server.println( filename); to_server.flush(); String line; while ((line = from_server.readLine()) != null) { System.out.println(line); } } catch (Exception e) { // повідомляти про будь-яке виключення System.err.println( e.toString()); } } } |
Порядок компіляції та запуску програм
Ці дві програми виконуються таким чином. Спочатку кожна компілюється на своєму вузлі за допомогою Java-компілятора, наприклад javac. Потім командою
java FileReaderServer |
запускається сервер. Після цього на іншому (або цьому ж) вузлі командою
java Client hostname filename |
запускається клієнт (hostname - це ім'я вузла, на якому виконується сервер, a filename - ім'я файлу, що хоче отримати клієнт з сервера). Сервер буде виконуватися до знищення його процесу (наприклад клавіатурною командою Ctrl-C), або до виникнення виняткової ситуації. Кількість програм-клієнтів, що можуть звертатися до серверу необмежена.
Завдання:
Користуючись наведеним прикладом розробити свої власні програми клієнта та сервера.
Відкомпілювати ці програми. Для цього треба створити окремий каталог (наприклад n:\java\), розташувати у ньому файли FileReaderServer.java та Client.java, викликати компілятор javac таким чином:
n:\java\>javac Client.java n:\java\>javac FileReaderServer.java
В цьому-ж каталозі створити текстовий файл. Наприклад таким чином:
n:\java\>dir >a1.txt
У окремому термінальному вікні запустити серверний модуль:
n:\java\>java FileReaderServer
Після цього, у окремому термінальному вікні запустити модуль клієнта таким чином:
n:\java\>java Client localhost a1.txt
Примітка: тут вважається, що і клієнт і сервер запущені на одному й тому-ж комп'ютері.
Запустити модулі клієнта і сервера на різних комп'ютерах та перевірити їх роботу у багатокомп'ютерному варіанті. При цьому під час запуску клієнтів замість імені localhost треба вказувати IP - адресу комп'ютера, на якому працює серверний модуль.
