Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tekhnologiyi_rozpodilenikh_sistem_ta_paralelnik...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
850.43 Кб
Скачать

5. Паралельна парадигма „клієнт - сервер"

Між виробником і споживачем існує однонаправлений потік інформації. Цей вид міжпроцесорної взаємодії часто зустрічається в паралельних програмах і не має аналогів в послідовних, оскільки в послідовній програмі тільки один потік управління, тоді як виробники і споживачі — незалежні процеси з власними потоками управління і власними швидкостями виконання.

Ще однією типовою схемою в паралельних програмах є взаємозв'язок типу клієнт-сервер. Процес-клієнт запрошує сервіс, потім чекає обробки запиту. Процес-сервер багато разів чекає запит, обробляє його, потім посилає відповідь. Як показано на мал.3, існує двонаправлений потік інформації: від клієнта до серверу і назад. Відносини між клієнтом і сервером в паралельному програмуванні аналогічні відносинам між програмою, що викликає підпрограму, і самою підпрограмою в послідовному програмуванні. Більш того, як підпрограма може бути викликана з декількох місць програми, так і у серверу звичайно є багато клієнтів. Запити кожного клієнта повинні оброблятися незалежно, проте паралельно може оброблятися декілька запитів, подібно тому, як одночасно можуть бути активні декілька викликів однієї і тієї ж процедури.

Мал.3. Клієнти і сервери

Взаємодія типу клієнт-сервер зустрічається в операційних системах, об'єктно-орієнтованих системах, мережах, базах даних і багатьох інших програмах. Типовий приклад — читання і запис файлу. Для визначеності припустимо, що є модуль файлового серверу, що забезпечує дві операції з файлом: read (читати) і write (писати). Коли процес-клієнт хоче отримати доступ до файлу, він викликає операцію читання або запису у відповідному модулі файлового серверу.

На однопроцесорній машині або в іншій системі з пам'яттю, що розділяється, файловий сервер звичайно реалізується набором підпрограм (для операцій read, write і т.д.) і структурами даних, що представляють файли (наприклад, дескрипторами файлів). Отже, взаємодія між процесом-клієнтом і файлом звичайно реалізується викликом відповідної процедури. Проте, якщо файл розділяється, важливо щоб запис в нього вівся одночасно тільки одним процесом, а читатися він може одночасно декількома процесами. Цей різновид завдання — приклад так званого завдання про "читачів і письменників", класичного завдання паралельного програмування.

У розподіленій системі клієнти і сервери звичайно розташовані на різних машинах. Наприклад, розглянемо запит по World Wide Web, який виникає коли користувач відкриває нову адресу URL у вікні програми-броузера. Web-броузер є клієнтським процесом, що виконується на машині користувача. Адреса URL побічно указує на іншу машину, на якій розташована Web-сторінка. Сама Web-сторінка доступна для процесу-серверу, що виконується на іншій машині. Цей процес-сервер може вже існувати або може бути створений; у будь-якому випадку він читає Web-сторінку, визначувану адресою URL, і повертає її на машину клієнта. Насправді при перетворенні адреси URL можуть використовуватися або створюватися додаткові процеси на проміжних машинах по шляху проходження.

Клієнти і сервери програмуються одним з двох способів залежно від того виконуються вони на одній або на різних машинах. У обох випадках клієнти є процесами. На машині з пам'яттю що розділяється сервер звичайно реалізується набором підпрограм. Для захисту критичних секцій і визначення черговості виконання ці підпрограми звичайно реалізуються з використанням взаємних виключень і умовної синхронізації. На мережевих машинах або машинах з розподіленою пам'яттю сервер реалізується одним або декількома процесами які звичайно виконуються не на клієнтських машинах. У обох випадках сервер часто являється багатопотоковою програмою з одним потоком для кожного клієнта.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]