Архитектуры многопоточных приложений

advertisement
Архитектуры многопоточных
приложений
Программирование с использованием
POSIX thread library
2006-2007 Иртегов Д.В.
Учебное пособие подготовлено по заказу и при поддержке
ООО «Сан Майкросистемс СПБ»
Обзор архитектур
•
•
•
•
•
•
Многопроцессные приложения
с автономными процессами
Многопроцессные приложения,
взаимодействующие через трубы, сокеты
и очереди System V IPC
Многопроцессные приложения,
взаимодействующие через разделяемую
память
Собственно многопоточные приложения
Событийно-ориентированные приложения
Гибридные архитектуры
Многопроцессные приложения
с автономными процессами
• Для каждой пользовательской сессии
или даже для каждого запроса
создается свой процесс.
• Он обрабатывает запрос или несколько
запросов и завершается.
Преимущества
•
•
•
•
Простота разработки. Можно не использовать
никаких многопоточных API и средств IPC.
Высокая надежность. Аварийное завершение
любого из процессов никак не затрагивает
остальные.
Хорошая переносимость. Приложение будет
работать на любой многозадачной ОС
Высокая безопасность. Процессы могут
запускаться от имени разных пользователей.
Можно реализовать принцип минимума
привилегий.
Недостатки
•
•
Далеко не все прикладные задачи можно
предоставлять таким образом. Например,
эта архитектура годится для сервера,
занимающегося раздачей статических
HTML-страниц, но совсем непригодна
для сервера баз данных и многих серверов
приложений.
Создание и уничтожение процессов –
дорогая операция, поэтому для многих
задач такая архитектура неоптимальна
Многопроцессные приложения,
взаимодействующие через сокеты, трубы
и очереди сообщений
•
•
«Гармонически взаимодействующие
процессы»
Процессы не имеют разделяемых
данных и взаимодействуют через
синхронизованные порты обмена
данными.
Преимущества
• Относительная простота разработки.
• Высокая надежность. Остальные процессы
приложения легко могут обнаружить ошибку
и восстановиться после нее, возможно просто
перезапустив отказавший процесс.
• Многие такие приложения (особенно основанные
на использовании сокетов) легко переделываются
для исполнения в распределенной среде.
• Хорошая переносимость. Приложение будет
работать на большинстве многозадачных ОС, в том
числе на старых Unix-системах.
• Высокая безопасность. Процессы могут запускаться
от имени разных пользователей.
Недостатки
•
•
•
•
•
Не для всех прикладных задач такую архитектуру легко
разработать и реализовать.
Все перечисленные средства IPC предполагают
последовательную передачу данных. Если необходим
произвольный доступ к разделяемым данным, такая
архитектура неудобна.
Передача данных через трубу, сокет и очередь сообщений
требует исполнения системных вызовов и двойного
копирования данных. Это дорогие операции.
В большинстве систем действуют ограничения на общее
количество труб, сокетов и средств IPC.
Создание и уничтожение процесса, а также переключение
между процессами – дорогие операции. Не во всех случаях
такая архитектура оптимальна.
Многопроцессные приложения с
разделяемой памятью
• Разделяемая память System V IPC
• Или отображенные на память файлы
• Для синхронизации можно использовать
семафоры System V IPC, блокировку
участков файлов либо примитивы
POSIX
Преимущества
•
•
•
Эффективный произвольный доступ
к разделяемым данным. Такая архитектура
пригодна для реализации серверов
баз данных.
Высокая переносимость. Может быть
перенесено на любую операционную
систему, поддерживающую
или эмулирующую System V IPC.
Относительно высокая безопасность.
Разные процессы приложения могут
запускаться от имени разных
пользователей.
Недостатки
•
Относительная сложность разработки. Ошибки соревнования
очень сложно обнаруживать при тестировании.
Низкая надежность. Аварийное завершение любого
из процессов приложения может оставить (и часто оставляет)
разделяемую память в несогласованном состоянии.
Создание и уничтожение процесса и переключение между
ними – дорогие операции. Поэтому данная архитектура
оптимальна не для всех приложений.
При определенных обстоятельствах, использование
разделяемой памяти может приводить к эскалации
привилегий.
Приложения, использующие разделяемую память, должны
исполняться на машинах, имеющих разделяемое ОЗУ.
•
•
•
•
–
В действительности, это ограничение можно обойти, например
используя отображенные на память разделяемые файлы, но это
приводит к значительным накладным расходам
Многопоточные приложения
•
•
•
Высокая производительность. На большинстве
Unix-систем, создание нити требует в десятки
раз меньше процессорного времени, чем создание
процесса. На не-Unix системах разница еще
больше
Эффективный произвольный доступ
к разделяемым данным. В частности, такая
архитектура пригодна для создания серверов
баз данных.
Высокая переносимость и легкость переноса ПО на
другие ОС, реализующие многопоточность.
Недостатки
•
•
Высокая вероятность ошибок соревнования
Высокая стоимость разработки и отладки приложений,
обусловленная п. 1.
Низкая надежность. Разрушение структур данных, например
в результате переполнения буфера или ошибок работы
с указателями, затрагивает все нити процесса и обычно приводит
к аварийному завершению всего процесса.
Низкая безопасность. Все нити приложения исполняются в одном
процессе, то есть от имени одного и того же пользователя и с
одними и теми же правами доступа.
Создание нити – все-таки довольно дорогая операция. Поэтому
данная архитектура оптимальна не для всех приложений.
Невозможность исполнять приложение на многомашинном
вычислительном комплексе.
•
•
•
•
–
Упоминавшиеся в предыдущем разделе приемы, такие, как отображение
на память разделяемых файлов, для многопоточной программы не
применимы
Событийно-ориентированные
архитектуры
• Программа рассматривается как набор
объектов, реагирующих на внешние
события.
• Методы этих объектов вызываются
последовательно по мере поступления
событий одним потоком или небольшим
количеством потоков
• Рассматривались на предыдущей
лекции
Преимущества
•
•
Высокая производительность.
Можно одновременно обрабатывать
множество событий одним потоком
или небольшим количеством потоков.
– Некоторые событийно-ориентированные
приложения обрабатывают сотни
и тысячи сетевых соединений в одном
потоке.
Недостатки
•
•
•
•
•
•
Не для всех приложений эта архитектура подходит. Так, если
обработка события требует длительных вычислений
или ее невозможно реализовать без использования блокирующихся
системных вызовов, это может затормозить обработку других
событий.
Разработка событийно-ориентированного приложения требует
высокой квалификации разработчиков. Высокая стоимость
разработки.
Код, рассчитанный на другую архитектуру (например, использующий
блокирующиеся системные вызовы), невозможно переиспользовать.
Не пригодна для вычислительных приложений
Низкая надежность. Фатальная ошибка при обработке любого
события приводит к аварийному завершению всего процесса.
Низкая безопасность. Поскольку все события обрабатываются
одним процессом, то все обработчики работают от имени одного
и того же пользователя. Невозможно реализовать принцип
минимально необходимых привилегий.
Гибридные архитектуры
• Отличаются большим разнообразием
• Могут сочетать как преимущества, так и
недостатки базовых архитектур
• Пример гибридной архитектуры –
«рабочие нити» (worker threads), когда
мы запускаем несколько копий
событийно-ориентированного сервера в
нескольких потоках
Архитектуры вычислительных
программ
• Программы с разделяемой памятью
• Программы с обменом сообщениями
• GRID-системы
Программы с разделяемой
памятью
• OpenMP
• Хороши для задач, в которых требуется много
разделяемых данных с произвольным
доступом
• Обычно реализуются в виде однопроцессных
многопоточных приложений
• В чистом виде не могут работать на
многомашинных кластерах
– Но могут на NUMA суперкомпьютерах
Программы с обменом
сообщениями
• MPI (Message Passing Interface)
• Подходит для задач, в которых
разделяемых данных мало или в
которых годится последовательный
доступ к разделяемым данным
• Могут исполняться на многомашинных
вычислительных кластерах
Гибридная архитектура
• MPI/OpenMP
• Пользуется тем фактом, что в кластеры
часто ставят многопроцессорные
машины
• А также тем, что задачи MPI довольно
много времени проводят, ожидая
сообщения
– При этом процессор может использоваться
для выполнения другой части работы
GRID-сети
• Допускают произвольное подключение и отключение
процессоров
– (как сети электроснабжения, допускающие подключение и
отключение как потребителей, так и генераторов)
• Могут использовать процессорное время
персональных компьютеров во время их простоя
• Годятся для задач, в которых параллельные
процессы вообще не взаимодействуют (центральный
сервер раздает участки задачи и собирает
результаты)
– Взлом шифров методом грубой силы
– Взятие интегралов методом Монте-Карло
– Некоторые задачи имитационного моделирования
Download