Page 43 - 6571
P. 43

блокування  виникає,  якщо  задача  під  порядковим  номером
            1очікує даних (сигналу) від задачі під порядковим номером 2, яка
            в свою чергу очікує даних від задачі під порядковим номером 1.
            Однак  на  практиці  ситуація  може  виявитися  ще  більш  заплута-

            ною.
                  Всі описані вище проблеми повинні бути виявлені і вирішені
            на етапі проектування програми.

                  Існує  ряд  прийомів,  що  використовуються  під  час  проекту-
            вання та написання паралельних програм. Коротко опишемо ос-
            новні із них:
                  1. Ітеративний паралелізм – використовується для реалізації

            декількох  процесів  (часто  ідентичних),  кожен  з  яких  включає  в
            себе  цикли.  Процеси  програми,  що  виступають  ітеративними

            програмами,  працюють  спільно  над  вирішенням  однієї  задачі.
            При  цьому  вони  взаємодіють  і  синхронізуються  або  за  допомо-
            гою спільних змінних, або через механізм передачі повідомлень.
            Такий  паралелізм  характерний,  насамперед,  синхронізацією  па-

            ралельних обчислень.
                  2. Рекурсивний паралелізм – використовується в програмах з
            однією або декількома рекурсивними процедурами, виклик яких

            є незалежним. Дана технологія носить назву «розділяй та волода-
            рюй» або «перебір з поверненнями».
                  3. Виробники та споживачі – це парадигма взаємодіючих не-
            рівноправних процесів. Одні з процесів «виробляють» дані, інші –

            їх «споживають». Часто такі процеси організовуються в конвеєр,
            через який проходить інформація. Кожен процес конвеєра «спо-
            живає вихід» свого попередника і «виробляє» вхідні дані для сво-

            го наступника.
                  4. Клієнти та сервери – це найбільш поширена модель взає-
            модії в розподілених системах. Клієнтський процес надсилає за-
            пит на сервер і чекає відповіді. Серверний процес очікує запит від

            клієнта, після чого виконує обробку цього запиту. Сервер може
            бути реалізований у вигляді одиничного процесу, що обслуговує
            одночасно декілька клієнтських процесів. Сервер може виступати

            багатопоточною  програмою,  кожен  потік  якої  обслуговує  свого
            клієнта. Якщо клієнт і сервер працюють на одному процесорі, то
            вони  представляють  собою  паралельне  програмне  узагальнення

            процедур  –  сервер  виконує  роль  процедури,  а  клієнт  виконує  її


                                                        42
   38   39   40   41   42   43   44   45   46   47   48