- •Лабораторна робота №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в з курсу “Паралельне програмування”
Приклад: віддалене читання файлу
До складу багатьох обчислювальних систем входять робочі станції, що використовуються окремими людьми і розподіленими серверами для збереження файлів, доступу до Internet і т.п. Припустимо, що клієнтські додатки виконуються на робочих станціях, зв'язаних з машиною, на якій установлений файловий сервер (серверна машина). Він забезпечує доступ до файлової системи, розташованої на локальних дисках. (Будемо припускати, що серверна машина працює під керуванням операційної системи Unix і використовує її файлову систему). Коли клієнт хоче прочитати файл, що зберігається на серверній машині, він зв'язується з серверним процесом, який на неї виконується. Клієнт відправляє серверові ім'я файлу, що він хоче прочитати. За умови, що файл може бути відкритий, сервер зчитує рядки файлу і відправляє їх клієнтові.
Сервер читання файлів мовою Java
У лістину, що наведений нижче, представлений код мовою Java для процесу-сервера. Сервер спочатку створює серверний сокет і чекає з'єднання через порт 9999. (Порт - це унікальний номер, що використовується клієнтами і серверами для того, щоб розрізнити конкретне мережне з'єднання.) Потім сервер чекає зв'язку з клієнтом. Далі сервер створює вхідний і вихідний потоки, що використовують сокет. Одержавши від клієнта ім'я файлу, сервер відкриває зазначений файл. Якщо цього файлу нема, сервер відправляє клієнтові повідомлення про помилку, закриває потоки і сокет і чекає наступного підключення клієнта. Якщо файл існує, сервер зчитує рядки файлу і відправляє їх клієнтові (використовуючи метод println()). При досягненні кінця файлу сервер закриває потоки і сокет і чекає наступного підключення клієнта. Якщо виникає виключна ситуація, сервер виводить повідомлення про помилку і завершує свою роботу.
import java.io.*; import java.net.*; public class FileReaderServer { public static void main( String args[]) { try { // створити серверний сокет й очикувати під'єднання до порту 9999 ServerSocket listen = new ServerSocket( 9999); while (true) { System.out.println( "Connection waiting ..."); Socket socket = listen.accept(); // чекати клієнта, створити вхідний і вихідний // потоки для обміну даними з клієнтом BufferedReader from_client = new BufferedReader( new InputStreamReader( socket.getInputStream())); PrintWriter to_client = new PrintWriter( socket.getOutputStream()); // отримати від клієнта им'я файлу і преревірити його існування String filename = from_client.readLine(); File inputFile = new File( filename); if (!inputFile.exists()) { to_client.println( "Unable to open file: " + filename); to_client.close(); from_client.close(); socket.close(); continue; } // читати рядки файлу і відправляти їх клієнту System.out.println( "reading from file " + filename); BufferedReader input = new BufferedReader( new FileReader( inputFile)); String line; while ((line = input.readLine()) != null) { to_client.println( line); } to_client.close(); from_client.close(); socket.close(); } } catch (Exception e) { // повідомляти про будь-яке виключення System.err.println( e.toString()); } } } |
