Сводка

Завершено
  • Компьютерные программы можно классифицировать как последовательные, параллельные, распределенные и параллельные.
  • Последовательная программа выполняется в запрограммированном порядке на одном ЦП (или, точнее, ядре).
  • Параллельная программа — это набор последовательных программ, которые совместно используют один или несколько ЦП во время выполнения.
  • Параллельная программа — это набор последовательных программ, которые пересекаются во времени, параллельно выполняясь на разных ЦП.
  • Параллельные программы, работающие на отдельных ЦП на разных сетевых компьютерах, называются распределенными программами.
  • Поток представляет собой наименьшую последовательность инструкций, которыми может управлять операционная система с помощью планировщика. Несколько потоков образуют процесс, и все они используют одно и то же адресное пространство процессора. Несколько процессов составляют задачу, а несколько задач обычно объединяются в задание.
  • Распределенное программирование имеет основополагающее значение для решения многих проблем, связанных, например, с научными рабочими нагрузками, вычислениями на основе больших объемов данных, базами данных и поисковыми системами.
  • Целый ряд проблем диктует необходимость разработки распределенных программ для облаков, а именно модели программирования, вычислительной модели и архитектуры программы.
  • В число стандартных моделей программирования входят модель с общей памятью и модель с передачей сообщений.
  • Модель с общей памятью предполагает наличие общего адресного пространства, доступного для всех задач. Задачи взаимодействуют друг с другом, считывая и записывая данные в это общее адресное пространство. Взаимодействие между задачами должно быть синхронизировано явным образом (с использованием таких конструкций, как барьеры, семафоры и блокировки). В качестве примера языка программирования модели с общей памятью можно привести OpenMP.
  • В модели с передачей сообщений задачи не используют общее адресное пространство и могут взаимодействовать друг с другом только путем явной отправки и получения сообщений. В качестве примера языка программирования модели с передачей сообщений можно привести MPI.
  • С учетом оркестрации различных параллельно выполняемых задач модели программирования также можно классифицировать как синхронные и асинхронные. В синхронных моделях программирования все задачи компонентов работают в режиме заданного порядка, а в асинхронных моделях — нет.
  • Программы также можно классифицировать в соответствии с типом параллелизма, который они реализуют. Они могут поддерживать как параллелизм данных, так и параллелизм графов.
  • Модели параллелизма данных делают акцент на распределении данных между несколькими компьютерами. При этом на каждом из них выполняется один и тот же код. Этот тип модели также называется моделью "одна программа — много данных" (SPMD).
  • Модели параллелизма графов ориентируются на распределение вычислений. Этот тип модели также называется моделью "много программ — много данных" (MPMD).
  • Задачи в модели распределенного программирования могут быть организованы в две различные архитектурные модели: асимметричная архитектура по принципу "главный-подчиненный" и симметричная одноранговая архитектура.
  • В организации "главный-подчиненный" необходимо, чтобы одна или несколько задач были специально назначены в качестве главных задач, которые будут координировать выполнение программы среди подчиненных задач.
  • Одноранговая организация состоит из набора равных задач, но требует более сложных схем для организации вычислений и принятия решений.
  • В число основных проблем, которые возникают при создании облачных программ, входят управление масштабируемостью, взаимодействием, разнородностью, синхронизацией, отказоустойчивостью и планированием.
  • Согласно закону Амдала ускорение программы не является бесконечным. Этот закон выражает ограничение на ускорение программы как функцию от доли времени, затрачиваемого программой на выполнение последовательного по своей природе кода.
  • Эффективное управление взаимодействием между распределенными задачами является определяющим принципом надлежащей производительности для многих приложений. Стратегии для улучшения взаимодействия в облаке включают совместное размещение тесно взаимодействующих задач и эффективное управление секционированием данных для отображения данных на ближайших узлах.
  • Облака привносят разнородность с точки зрения базового физического оборудования, которое обычно маскируется от конечного пользователя с помощью виртуализации. Программы, работающие в облаке, которые можно настраивать в соответствии с разнородным аппаратным обеспечением, могут выигрывать в плане производительности.
  • Надежные методы синхронизации являются обязательным условием в распределенном программировании для решения таких проблем, как взаимоблокировки.
  • Отказоустойчивость представляет собой серьезную проблему при программировании в облаке. Во время работы в облаке программы должны прогнозировать сбои программного обеспечения и оборудования и восстанавливаться в случае их возникновения.
  • Методы планирования задач и заданий учитывают уникальную природу облачных ресурсов, что позволяет максимально повысить производительность.