Источник проблемы

Компьютерное программное обеспечение писалось традиционно для последовательных вычислений (см. Здесь). Это означало, что для решения проблемы алгоритм делит ее на более мелкие инструкции, которые должны выполняться последовательно. Но технологии быстро развиваются, в том числе и вычислительная среда. Было сделано много улучшений, которые привели к более высокой скорости обработки, которую может обеспечить компьютерная система, большей емкости хранилища и большему масштабу решаемых проблем.

Тенденция развития оборудования показывает, что в настоящее время оборудование масштабируется по горизонтали (путем увеличения количества машин), а не масштабируется вертикально (на добавляя больше мощности к машине). Результатом стало изобретение многоядерных процессоров, мультипроцессоров и даже облачных вычислений. Следовательно, для оптимизации современных компьютерных возможностей, которые развивались во многих направлениях, появились новые подходы, называемые параллелизм и параллелизм. Вы можете увидеть детали разработки вычислительной среды и важность этих новых подходов здесь.

Эти три термина говорят о том, как компьютерная система выполняет или обрабатывает задачи. Я предполагаю, что этот читатель имеет фундаментальные знания о программировании. В этой статье основное внимание будет уделено теоретическому объяснению этих терминов, извлеченных из практического опыта, и объяснению взаимосвязи, связанной с оптимизацией возможностей современного оборудования.

Основы

Последовательный

Обработка происходит в том порядке, в котором она была получена

Очевидно, что задачи / задания выполняются по очереди в соответствии с порядком. Если бы у нас было две задачи и они собирались обрабатываться одним ресурсом, то он обрабатывал бы первую задачу, которая попадает в очередь. После того, как первая будет завершена, она продолжит обработку второй задачи.

Параллелизм

Выполнение множества задач одновременно

Слово «делаю» в заявлении выделено жирным шрифтом, чтобы показать, что это ключ. Параллелизм - это буквально одновременное выполнение множества задач. В компьютере это означает, что несколько задач будут выполняться независимо в одно и то же время с разными ресурсами обработки. Следовательно, требования к параллелизму:

  • Требуется больше ресурсов (более 1) для обработки задач
  • Задачи не зависят друг от друга

Вы можете слышать / читать о досадно параллельном. При параллельных вычислениях недопустимо параллельная рабочая нагрузка или неприятно параллельная проблема - это проблема, для которой не требуется или не требуется никаких усилий для разделения проблемы на несколько параллельных задач.

С другой стороны, реальность показывает, что не все задачи программирования можно распараллеливать (можно выполнять параллельно). Так что сколько бы у нас ресурсов обработки ни было, это не повлияет на скорость обработки. Такая проблема закончится единственным ресурсом обработки, который выполняет задачу последовательно или одновременно.

Параллелизм

Решать сразу несколько задач

Слово торговля также выделено жирным шрифтом, чтобы показать разницу между параллелизмом и параллелизмом. Выполнение множества задач одновременно означает выполнение множества задач одновременно, но не имеет значения, выполняются ли они одновременно или нет. Следовательно, контекст параллелизма может быть достигнут с помощью одного или нескольких ресурсов обработки. Работа со многими вещами одновременно с одним ресурсом обработки означает, что вы делаете много вещей, поскольку они выполняются в одно и то же время, выполняя переключение контекста между задачами. С другой стороны, контекст параллелизма со многими ресурсами обработки означает параллелизм. Это означает, что мы выполняем параллелизм за счет параллелизма, но не наоборот.

Концепция параллелизма позволяет нам думать о том, как структурировать нашу программу для оптимального выполнения. Это побуждает нас разбивать длительный процесс, который имеет много раз или долгое время ожидания, на части процесса. При таком подходе мы можем выполнять их одновременно, чтобы исключить время ожидания.

Пример использования

Так какой из них лучше? Как параллелизм и параллелизм могут оптимально использовать возможности современного оборудования? Чтобы углубить наши знания и ответить на эти вопросы, позвольте нам изучить это на примере решения проблем / задач. Итак, допустим, у нас есть задача под названием «Сделать стирку», которую необходимо выполнить. Допустим, мы должны стирать более 4 пакетов. В данном случае опустим фактор стиральной машины. После того, как мы определим нашу задачу, мы получим детали:

  • Сделайте стирку
    На каждый пакет уходит 30 минут. Он состоит из подготовки одежды к стирке за первые 5 минут, 20 минут ожидания и последних 5 минут, чтобы забрать нашу одежду.

Давайте решим эти проблемы с помощью некоторых приемов:

Последовательный

В этом состоянии у нас есть только задача, состоящая из 4 шагов. Каждый шаг представляет собой упражнение по стирке 1 пакета ткани, которое стоит 30 минут. Так как это единственная задача, то я сделаю ее сам. Я сделаю первый шаг работы, которую нужно выполнить в первые 30 минут, и перейду к следующему шагу после того, как он будет закончен, и так далее. Я трачу 5 минут на подготовку одежды для каждого шага, жду 20 минут, беру пакет с тканью на последние 5 минут, а затем начинаю новый шаг, чтобы постирать следующий пакет. Выполнение задачи в последовательном режиме занимает около 120 минут.

Такой подход не использует доступное количество ресурсов обработки. Сколько бы людей ни было, они просто не могут мне помочь, потому что с одним человеком нужно выполнить только одно задание.

Параллелизм

Как я уже упоминал ранее, для параллелизма требуется больше ресурсов обработки (в данном случае человека) для одновременного выполнения множества задач / заданий, а также требуется задача, которая может быть распараллелена.

Итак, давайте проанализируем нашу задачу. У нас есть большой или долгий процесс, который называется «постирать», который состоит из 4 пакетов ткани, которые нужно постирать. Мы видим последовательный процесс, он состоит из 4 шагов (каждые 30 минут) для выполнения задачи. Но мы можем понять, что между этими 4 шагами нет никакой связи или зависимости. Таким образом, мы можем сделать вывод, что задачи такого типа можно распараллеливать. Мы можем разбить этот долгий и большой процесс на более мелкие. В этом случае мы разделим его на 2 небольших процесса, каждый из которых состоит из 2 пакетов ткани (стоимостью 60 минут). Итак, теперь у нас есть 1-я и 2-я задача с одинаковой нагрузкой.

Поскольку нам нужно больше ресурсов обработки (человеческих), чтобы выполнить эту новую небольшую задачу, я попрошу сестры помочь мне взять вторую задачу, а я - первую. При этом методе выполнения есть 2 задачи (каждая задача состоит из 2 пакетов стирки), которые выполняются независимо разными ресурсами обработки (я и моя сестра). Выполнение всех этих двух задач с использованием двух ресурсов обработки в технике параллелизма занимает около 60 минут. Это быстрее, чем последовательный процесс.

Так что же ты думаешь? Да, может быть лучше. Мы можем сделать больше распараллеливания, разбив задачу на 4 более мелкие задачи, каждая из которых состоит только из 1 пакета ткани, который нужно постирать (стоимостью 30 минут). Но требование состоит в том, что нам нужно сделать горизонтальное масштабирование, то есть увеличить количество ресурсов обработки (в данном случае - человеческих). Для выполнения всех задач нам необходимо масштабировать до 4 доступных ресурсов обработки (человек). Это даст в общей сложности 30 минут на выполнение 4 задач, которые выполняются 4 ресурсами обработки.

В настоящее время вычислительная среда поддерживает горизонтальное масштабирование. Такие технологии, как многоядерный процессор, многопроцессор и облачные вычисления, были изобретены для достижения более высокой скорости обработки в компьютерной системе за счет параллелизма.

Параллелизм

Параллелизм может быть достигнут только с одним обрабатывающим ресурсом (человеком), который может выполнять множество задач одновременно. Чтобы использовать один ресурс для решения многих задач, нам необходимо иметь представление о проблемах, чтобы мы могли эффективно структурировать нашу программу. В этом случае мы проанализировали, что наша задача «стирка» может быть разделена на 2–4 более мелких задачи / задания, поскольку между ними нет зависимости. Эффективность - это работа над параллелизмом, поскольку у нас есть более 1 ресурса обработки для выполнения задач. Но работает ли это распараллеливание, если у нас есть только 1 ресурс обработки?

Ответ в том, что мы должны глубже проанализировать проблему. Если мы увидим более подробную информацию для каждой из наших небольших задач, которые были разделены, она состоит из 3 шагов. Подготовка, ожидание и сбор шага ткани. Ожидание этапа стирки заставляет нас (как ресурсы обработки) бездействовать в течение 20 минут, пока мы можем делать другие полезные вещи. Следовательно, мы можем выполнять параллелизм (обрабатывать многие вещи) всего с одним обрабатывающим ресурсом (человеком), используя это «свободное время».

Как это работает :

  • Сначала я сделаю свою первую работу.
  • Мои первые 5 минут я потрачу на подготовку одежды на 1-м задании.
  • После того, как я перейду на этап ожидания (стоимость 20 минут) в 1-м задании, я перейду к 2-му заданию и начну 5-минутный этап подготовки поверх него. Потом буду делать то же самое до 4-го задания.
  • Наконец, период ожидания для каждой работы будет завершен, и я могу закончить свои последние 5 минут, чтобы забрать ткань, начиная с 1-го, 2-го, 3-го и 4-го заданий.

Применяя такой подход, я выполняю сразу несколько (4) заданий. Вы можете видеть на изображении выше, что стрелка между списком задач и эмоцией «я» означает, что я как ресурс обработки буду переключать контекст между задачами. Это сокращает неэффективное время ожидания для каждой задачи, выполняя другую задачу, в результате чего общее время выполнения составляет всего 45 минут. Это лучше, чем последовательный процесс (120 минут), и даже лучше, чем параллелизм с двумя вычислительными ресурсами, выполнять 2 небольшие задачи одновременно (60 минут).

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

Параллелизм с параллелизмом

Параллелизм также может быть достигнут за счет параллелизма (с большим количеством ресурсов обработки). В этом случае мне понадобится помощь сестры. Каждый из нас будет выполнять 2 работы. Я буду заниматься 1-й и 2-й работой, а моя сестра - 3-й и 4-й работой.

Как это работает:

  • При таком подходе мы одновременно выполняем первую работу 5 минут. (Я на 1-й работе, а моя сестра на 3-й работе).
  • После перехода на этап ожидания в нашей первой работе каждый из нас перейдет на нашу вторую работу, это 2-я работа для меня и 4-я работа для моей сестры.
  • Через 5 минут нашей второй работы мы перейдем к этапу ожидания на нашей второй работе, в результате чего мы оба некоторое время будем бездействовать.
  • После того, как моя ткань будет полностью выстирана на 1-м задании, я заберу ее. Когда я заканчиваю свою 1-ю работу, моя ткань на 2-й работе уже готова для стирки, и я ее тоже заберу. С другой стороны, моя сестра сделает то же самое с 3-й и 4-й работой.

Этот случай является аналогом компьютерной системы, которая имеет многопроцессорный или многоядерный процессор (или оба). Параллелизм позволит ресурсу работать над другой задачей, которую можно распараллелить, вместо того, чтобы ничего не делать (простаивать). Всего на это уходит 35 минут. Понятно, что этот тип выполнения лучше всех других методов выполнения (исключая параллелизм с 4 ресурсами обработки и 4 меньшими задачами).

Вывод

Параллелизм - это выполнение множества задач одновременно, в то время как параллелизм предполагает выполнение множества задач одновременно. Выполнение множества задач одновременно означает выполнение множества задач одновременно, независимо от того, выполняются ли задачи в одно и то же время или нет. Параллелизма можно достичь с помощью одного ресурса обработки, выполняя переключение контекста между задачами, в то время как этого также можно достичь с помощью многих ресурсов обработки за счет параллелизма.

Оба подхода изобретены для оптимального использования современной разработки оборудования, когда ресурсы масштабируются горизонтально (за счет увеличения количества машины), чем вертикально (за счет увеличения мощности машины).

Понимание этих подходов поможет нам структурировать нашу программу так, чтобы она работала эффективно. Воздействие еще больше по мере роста масштабов. Мы можем добиться рентабельности, оптимизировав выполнение нашего программного обеспечения, вместо того, чтобы просить нашу компанию обновить или добавить дополнительные ресурсы обработки, чтобы справиться с ростом количества пользователей или рабочей нагрузки.

Что ж, надеюсь, эта статья даст вам новое понимание или углубит ваши знания в области разработки программного обеспечения.

Заявление об ограничении ответственности: эта статья написана на основе моего понимания и цитируется из многих источников, которые я упоминаю ниже. Я открыт для критики, оценок и предложений. Дайте мне знать, что вы думаете, оставив свой комментарий ниже.

Ссылки