Почему существует путаница
Путаница существует, потому что значения обоих слов в словаре почти одинаковы:
- Одновременно : существует, происходит или выполняется одновременно (dictionary.com)
- Параллель : очень похоже и часто происходит в одно и то же время (Мерриам Уэбстер).
Однако то, как они используются в информатике и программировании, совершенно иное. Вот моя интерпретация:
- Параллельность : прерывистость
- Параллелизм : Независимость
Так что я имею в виду под вышеприведенными определениями?
Я уточню аналогию с реальным миром. Допустим, вы должны выполнить 2 очень важных задания за один день:
- Получить паспорт
- Подготовить презентацию
Теперь проблема в том, что задача 1 требует, чтобы вы пошли в чрезвычайно бюрократическую правительственную канцелярию, которая заставляет вас ждать 4 часа в очереди, чтобы получить свой паспорт. Между тем, задача-2 требуется вашим офисом, и это критически важная задача. Оба должны быть закончены в определенный день.
Случай 1: последовательное выполнение
Обычно вы едете в паспортный стол на 2 часа, ждете в очереди 4 часа, выполняете задание, возвращаетесь на два часа назад, возвращаетесь домой, еще 5 часов не спите и делаете презентацию.
Случай 2: одновременное выполнение
Но ты умный. Вы планируете заранее. Вы носите с собой ноутбук и, ожидая в очереди, начинаете работать над презентацией. Таким образом, как только вы вернетесь домой, вам просто нужно работать 1 дополнительный час вместо 5.
В этом случае обе задачи выполняются вами по частям. Вы прервали задание на паспорт во время ожидания в очереди и работали над презентацией. Когда вам позвонили, вы прервали презентацию и переключились на паспорт. Экономия времени была по существу возможна благодаря прерыванию обеих задач.
Параллелизм, IMO, можно понимать как свойство «изоляции» в ACID . Две транзакции базы данных считаются изолированными, если субтранзакции могут выполняться любым и любым способом с чередованием, и конечный результат такой же, как если бы две задачи выполнялись последовательно. Помните, что как для паспортных, так и для презентационных задач вы являетесь единственным исполнителем .
Случай 3: Параллельное выполнение
Теперь, так как вы такой умный парень, вы, очевидно, выше, и у вас есть помощник. Поэтому, прежде чем уйти, чтобы начать задание на паспорт, позвоните ему и скажите, чтобы он подготовил первый проект презентации. Вы тратите весь свой день и заканчиваете задание на паспорт, возвращаетесь, просматриваете свои письма и находите черновик презентации. Он проделал довольно солидную работу и с некоторыми правками еще через 2 часа, вы дорабатываете.
Теперь, поскольку ваш помощник такой же умный, как и вы, он мог работать над ним независимо , без необходимости постоянно запрашивать у вас разъяснения. Таким образом, из-за независимости задач они выполнялись одновременно двумя разными исполнителями .
Все еще со мной? Хорошо ...
Случай 4: одновременно, но не параллельно
Помните ваше паспортное задание, где вы должны ждать в очереди?
Поскольку это ваш паспорт, ваш помощник не может ждать вас в очереди. Таким образом, задание на паспорт имеет возможность прерывания (вы можете остановить его, ожидая в очереди, и возобновить его позже, когда будет набран ваш номер), но нет независимости (ваш помощник не может ждать в твоя замена).
Случай 5: параллельно, но не одновременно
Предположим, что в правительственном учреждении есть проверка безопасности для входа в помещение. Здесь вы должны удалить все электронные устройства и передать их сотрудникам, и они вернут ваши устройства только после того, как вы выполните свою задачу.
В этом случае задача паспорта не может быть независимой и непрерывной . Даже если вы ждете в очереди, вы не можете работать над чем-то другим, потому что у вас нет необходимого оборудования.
Точно так же, скажем, презентация настолько математична по своей природе, что вам требуется 100% концентрация в течение как минимум 5 часов. Вы не можете сделать это, ожидая очереди на паспорт, даже если у вас есть ноутбук.
В этом случае задание на презентацию составляет независимо (либо вы, либо ваш помощник можете приложить 5 часов целенаправленных усилий), но не прерываемое .
Случай 6: параллельное и параллельное выполнение
Теперь скажите, что помимо назначения помощника на презентацию, вы также носите с собой ноутбук для задания на паспорт. При ожидании в очереди вы видите, что ваш помощник создал первые 10 слайдов в общей колоде. Вы отправляете комментарии к его работе с некоторыми исправлениями. Позже, когда вы вернетесь домой, вместо 2 часов, чтобы доработать проект, вам просто понадобится 15 минут.
Это стало возможным, потому что презентационная задача имеет независимость (любой из вас может это сделать) и возможность прерывания (вы можете остановить ее и возобновить позже). Таким образом, вы одновременно выполнили обе задачи и параллельно выполнили задачу представления.
Давайте скажем, что, помимо чрезмерной бюрократии, правительственная служба коррумпирована. Таким образом, вы можете показать свою идентификацию, ввести ее, начать ждать в очереди для вызова вашего номера, подкупить охранника и кого-то еще, чтобы удержать вашу позицию в линии, улизнуть, вернуться до того, как ваш номер будет вызван, и возобновить ожидание сами.
В этом случае вы можете выполнять как паспортные, так и презентационные задачи одновременно и параллельно. Вы можете улизнуть, и ваша позиция удерживается вашим помощником. Вы оба можете работать над презентацией и т. Д.
Вернуться к Информатике
В вычислительном мире вот примеры сценариев, типичных для каждого из этих случаев:
- Случай 1: Обработка прерываний.
- Случай 2: Когда есть только один процессор, но все выполняющиеся задачи имеют время ожидания из-за ввода-вывода.
- Случай 3: Часто наблюдается, когда мы говорим о кластерах с уменьшением карты или hadoop.
- Случай 4: Я думаю, что Случай 4 встречается редко. Нередко задача выполняется одновременно, но не параллельно. Но это могло бы случиться. Например, предположим, что для вашей задачи требуется доступ к специальному вычислительному чипу, доступ к которому возможен только через процессор-1. Таким образом, даже если процессор-2 свободен, а процессор-1 выполняет какую-то другую задачу, специальная вычислительная задача не может выполняться на процессоре-2.
- Случай 5: также редкий, но не такой редкий случай, как в случае 4. Непоследовательный код может быть критической областью, защищенной мьютексами. После запуска он должен выполнить до конца. Однако две разные критические области могут развиваться одновременно на двух разных процессорах.
- Случай 6: IMO, большинство дискуссий о параллельном или параллельном программировании в основном говорят о случае 6. Это сочетание и сопоставление как параллельных, так и параллельных выполнений.
Параллелизм и Го
Если вы понимаете, почему Роб Пайк говорит, что параллелизм лучше, вы должны понять, что причина в этом. У вас очень длинная задача, в которой есть несколько периодов ожидания, когда вы ожидаете некоторых внешних операций, таких как чтение файла, загрузка по сети. В своей лекции все, что он говорит, это «просто разбейте эту длинную последовательную задачу, чтобы вы могли сделать что-то полезное, пока ждете». Вот почему он говорит о разных организациях с разными сусликами.
НетСила Go заключается в том, что этот взлом становится действительно простым благодаря ключевому слову и каналам go
. Кроме того, имеется отличная базовая поддержка во время выполнения для планирования этих подпрограмм.
Но по сути, параллелизм лучше параллелизма?
Яблоки лучше апельсинов?