В многопроцессорном режиме вы используете несколько процессоров для распределения вычислений. Поскольку каждый из процессоров работает параллельно, вы эффективно можете выполнять несколько задач одновременно. Вы хотели бы использовать многопроцессорность для задач, связанных с ЦП . Примером может быть попытка вычислить сумму всех элементов огромного списка. Если на вашем компьютере 8 ядер, вы можете «разрезать» список на 8 меньших списков и вычислить сумму каждого из этих списков отдельно для отдельного ядра, а затем просто сложить эти числа. Вы получите ~ 8-кратное ускорение, сделав это.
В (мульти) резьбывам не нужно несколько процессоров. Представьте себе программу, которая отправляет множество HTTP-запросов в Интернет. Если вы использовали однопоточную программу, она останавливала выполнение (блок) при каждом запросе, ожидала ответа, а затем продолжала после получения ответа. Проблема здесь в том, что ваш процессор на самом деле не работает, ожидая, пока какой-то внешний сервер выполнит эту работу; Тем временем он действительно мог бы проделать некоторую полезную работу! Исправление заключается в использовании потоков - вы можете создать множество из них, каждая из которых отвечает за запрос некоторого контента из Интернета. Хорошая вещь о потоках заключается в том, что даже если они работают на одном ЦП, ЦП время от времени «замораживает» выполнение одного потока и переходит к выполнению другого (это называется переключением контекста, и это происходит постоянно в недетерминированном режиме). интервалы). Итак, если ваша задача - использовать многопоточность.
asyncio, по сути, распределяет потоки, когда не процессор, а вы, как программист (или собственно ваше приложение), решаете, где и когда происходит переключение контекста . В Python вы используете await
ключевое слово, чтобы приостановить выполнение вашей сопрограммы (определяется с помощью async
ключевого слова).