Параллелизм, многопроцессорность, параллелизм, многопоточность путаницы между тем, как они могут быть связаны - PullRequest
2 голосов
/ 09 апреля 2019

Пожалуйста, исправьте меня, если я ошибаюсь в своих объяснениях и своем вопросе, я пытаюсь понять, как правильно все это сформулировать.

1) Может ли многопоточность = параллелизм?

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

2) Следуйте вышеприведенному, если мы предположим, что ответ отрицательный, означает ли это, что многопоточность ВСЕГДА совпадает с параллелизмом?

3) Могут ли программы быть одновременными, только если они поддерживают многопоточность? Давайте возьмем PHP, я читал, что он не поддерживает многопоточность, поэтому может ли выполнение PHP по-прежнему поддерживать параллелизм внутри себя, если не можетраскрутить другие темы?Я надеюсь, что этот вопрос имеет смысл ... в основном, как может программа, которая не поддерживает потоки, запускать параллелизм в пределах своего собственного выполнения?

4) Всегда ли параллелизм рассматривается как многопроцессорная обработка?

Извините за беспорядок вопросов, не знаю, как правильно их сформулировать.

1 Ответ

0 голосов
/ 10 апреля 2019

Параллельность может быть определена как состав и чередование независимо выполняемых задач.

Параллелизм - это одновременное выполнение независимых задач.

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

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

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

Потоки часто реализуются современными операционными системами как единица выполнения, состоящая из выделенного стека и набора регистров ЦП.Это позволяет ОС быстро переключаться между ними без необходимости освобождения всего пространства памяти процесса.Большинство современных ОС могут запускать потоки параллельно, если доступно несколько ядер ЦП, но это не всегда имело место.Например, до 2011 года Linux не разрешал одновременное выполнение потоков, принадлежащих одному и тому же процессу, через BKL .

Более того, даже если ОС поддерживает параллельное выполнение потоков, принадлежащих одному и тому же процессу.процесс, не все языковые платформы позволяют это.Например, основной интерпретатор Python по-прежнему запрещает параллельное выполнение потоков с помощью GIL .

В качестве общих указаний потоки можно считать параллельными в большинстве случаев.Они могут быть параллельными или нет в зависимости от платформы.

Та же проблема относится к процессам.Первые версии операционных систем для смартфонов обеспечивали очень ограниченную поддержку параллелизма и почти без параллелизма.Операционные системы устройств IoT могут по-прежнему зависеть от подобных проблем.

Как правило, на оборудовании с несколькими ядрами ЦП многопроцессорная обработка в большинстве случаев допускает параллелизм.

Существуют и другие способы достижения параллелизма и даже параллелизма.без необходимости полагаться на специальные средства ОС.

Например, Erlang / Elixr может запускать несколько процессов параллельно.Процессы Erlang не являются ни процессами ОС, ни потоками.Они абстрагируют параллелизм в своей собственной реализации.

Go представил goroutine в качестве легких единиц выполнения.

Python asyncio Модуль позволяет разработчикудля чередования операций, позволяющих одновременно выполнять код.

...