Конкурентность и параллелизм — разные вещи

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

Конкурентность — это выполнение задач за определённое время (например, есть 5 процессов и все они в сумме выполняются в течение 60 минут по очереди). Важная деталь заключается в том, что задачи необязательно выполняются одновременно, поэтому их можно разделить на более мелкие и чередующиеся.

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

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

Параллелизм — это выполнение задач в одно и то же время (например, есть 5 задач, каждая из них выполняется в течение 60 минут). Само название подразумевает, что они выполняются параллельно.

Вернёмся на кухню: теперь у нас есть два шеф-повара. Один следит за духовкой, а второй нарезает лук. Работа разделена, так как теперь на кухне трудятся два повара.

Параллелизм — подкласс конкурентности: перед выполнением нескольких одновременных задач вам нужно их сначала правильно организовать.

Что ещё можно почитать на эту тему:

  1. Сакральное искусство параллельного и конкурентного программирования.
  2. Параллелизм vs. Конкурентность.
  3. Основные принципы программирования: конкурентность.

Перевод статьи «Concurrency != Parallelism»

Ещё интересное для вас:
Тест: что вы знаете о работе мозга?
Базовый чек-лист по SEO перед сдачей сайта заказчику
Что посмотреть и куда сходить разработчку — ближайшие события