Как сказал Роб Пайк, со-изобретатель языка Go:
- Параллельность - это одновременное выполнение множества задач.
- Параллелизм заключается в том, чтобы делать много вещей одновременно.
- Не то же самое, но связано.
- Один касается структуры, другой - выполнения.
- Параллельность предоставляет способ структурирования решения для решения проблемы, которая может (но не обязательно) быть распараллеливаемой.
Из книги Лучано Рамальо, "Свободно Python" Глава 18 , стр. 557.
То, что они пытаются сказать, это то, что многопроцессорная обработка (это также название библиотеки, используемой в Python для параллелизма) - это способ решения проблем, когда вам действительно нужно несколько задач, связанных с процессором. или параллельные задачи. В Python это достигается путем обхода GIL с использованием, например, Python Многопроцессорного модуля
В Python есть нечто, называемое GIL, позволяющее запускать только один нить в то время. Вам нужно будет обойти GIL, чтобы использовать параллелизм. Между тем, вы можете достичь параллелизма даже с ограничением GIL: одновременно может выполняться только один поток !!
В Python вы можете достичь параллелизма с:
- Threads,
- Фьючерсы (на основе потоков)
- и Asyn c Ввод / вывод (не на основе потоков, а циклы событий и совместная многозадачность)
Итак, как вы можете видеть у вас есть 3 способа параллелизма, но из-за ограничения GIL вы не можете использовать его в параллельных задачах или задачах с привязкой к процессору
Я нашел статью, которая может помочь вам с параллелизмом и Asyn c I / O
Параллелизм в Python с Asyn c I / O
Для достижения параллелизма в Python вам необходимо обойти GIL. Модуль python, который помогает с этим, называется «многопроцессорность».
По поводу ваших сомнений:
... (который говорит, что многопроцессорность идеальна для задач, связанных с ЦП, а многопоточность идеальна для задач, связанных с вводом-выводом) относится только к среде Python.
Я не могу сказать, относится ли она только к Python, поскольку я не знаю всех других языков, но, например, Javascript печально известен своим асинхронным c подходом ввода / вывода, в то время как C#, C ++, Java достигают параллелизма и параллелизма без каких-либо неудобств или ограничений при использовании потоков. C# as JavaScript также реализовал Asyn c I / O долгое время go.
Оба, Дэвид Бизли и Лукаш Ланга упомянули этот факт в следующих беседах
Дэвид Бизли, выступление на PyCon Brazil 2015
Дэвид Бизли, любопытный курс по сопрограммам и параллелизму
Лукаш Ланга, Мышление в сопрограммах - PyCon 2016
Ссылки также представлены в представлении ниже