Процессы и потоки в Python — основные различия
В этом руководстве вы узнаете о процессах и потоках в Python и, что более важно, об основных различиях между ними.
- Процессы и потоки в Python
- Одноядерные процессоры
- Многоядерные процессоры
- Задачи, связанные с процессором, и задачи, связанные с вводом-выводом
- Основные различия между процессами и потоками
Процессы и потоки в Python
Предположим, у вас есть простая программа на Python:
x = 10 y = 20 z = x + y
Компьютеры не понимают языка Python. Они понимают только машинный код, который представляет собой набор инструкций, содержащий ноль и единицу.
Следовательно, вам понадобится интерпретатор Python для выполнения этой программы, которая преобразует код Python в машинный код.
Когда вы выполняете команду python app.py, интерпретатор Python (CPython) компилирует файл app.py в машинный код. И тогда операционной системе (ОС) необходимо загрузить программу в память (ОЗУ) для запуска программы. Как только ОС загружает программу в память, она передает инструкции в ЦП для выполнения через шину.
Как правило, ОС перемещает инструкции в очередь, также известную как конвейер. Затем ЦП выполнит инструкции из конвейера.
По определению, процесс — это экземпляр программы, работающей на компьютере. А поток — это единица выполнения внутри процесса.
Обратите внимание: если вы запустите программу несколько раз, у вас будет одна программа, но несколько процессов, каждый из которых представляет экземпляр программы.
Программа подобна классу, а процессы — объектам класса.
На следующем рисунке показан процесс запуска программы Python на компьютере:
Итак, вы узнали, как разработать программу, имеющую один процесс и один поток. Поэтому иногда термины «процесс» и «поток» часто используются как синонимы. Программа может иметь один или несколько процессов, а процесс может иметь один или несколько потоков.
Когда программа имеет несколько процессов, это называется многопроцессорностью. Если программа имеет несколько потоков, это называется многопоточностью.
Одноядерные процессоры
Раньше процессор имел только одно ядро. Другими словами, такой процессор может одновременно запускать только один процесс. Для выполнения нескольких процессов «одновременно» ОС использует программный компонент, называемый планировщиком:
Планировщик подобен переключателю, который планирует процессы. Основная задача планировщика — регулярно отбирать инструкции и отправлять их на исполнение.
Планировщик переключается между процессами настолько быстро (около 1 мс), что создается иллюзия, что компьютер может выполнять несколько процессов одновременно.
Многоядерные процессоры
Сегодня ЦП часто имеет несколько ядер, например два ядра (двухъядерный) и четыре ядра (четырехъядерный).
Количество ядер будет определять количество процессов, которые процессор может выполнять одновременно. Как правило, чем больше ядер имеет процессор, тем больше процессов он может выполнять одновременно.
Например, двухъядерный процессор может выполнять ровно два одновременных процесса, а четырехъядерный процессор может выполнять не более четырех.
Многопроцессорность использует многоядерный процессор внутри одного компьютера, который действительно выполняет несколько процессов параллельно.
Задачи, связанные с процессором, и задачи, связанные с вводом-выводом
Программы решают два типа задач: связанные с вводом-выводом или связанные с процессором.
- Задачи, связанные с вводом-выводом, тратят больше времени на ввод-вывод, чем на вычисления. Типичными примерами задач, связанных с вводом-выводом, являются сетевые запросы, подключения к базе данных и чтение/запись файлов.
- Напротив, задачи, связанные с ЦП, требуют больше времени для вычислений, чем для генерации запросов ввода-вывода. Типичными примерами задач, связанных с процессором, являются умножение матриц, поиск простых чисел, сжатие видео и потоковое видео.
Технически многопоточность подходит для задач, связанных с вводом-выводом, а многопроцессорность — для задач, связанных с процессором.
Основные различия между процессами и потоками
В следующей таблице показаны основные различия между процессом и потоком:
Критерии | Процесс | Поток |
---|---|---|
Совместное использование памяти | Память не распределяется между процессами | Память распределяется между потоками внутри процесса |
Объем памяти | Большой | Маленький |
Обработка с привязкой к процессору и вводу-выводу | Оптимизирован для задач, связанных с процессором | Оптимизирован для задач, связанных с вводом-выводом |
Время начала | Медленнее, чем поток | Быстрее, чем процесс |
Прерываемость | Дочерние процессы прерываемы | Потоки не прерываемы |