Процессы и потоки в Python

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

Представьте, что у нас есть простая программа на Python:

x = 10
y = 20
z = x + y

Компьютеры языка Python не знают и не понимают. Они понимают только машинный код — набор инструкций из нуля и единиц.

Поэтому для выполнения программы на Python необходим интерпретатор, который переводит  Python-код в машинный код.

Когда вы запускаете какой-нибудь скрипт на Python — например, app.py — интерпретатор Python (CPython) компилирует app.py в машинный код.

Операционная система (ОС) должна загрузить программу в память (RAM), чтобы запустить ее.

Как только ОС загружает программу в память, она по шине перемещает инструкции в центральный процессор для выполнения.

В общем случае ОС перемещает инструкции в очередь, также известную как конвейер. Затем центральный процессор выполняет инструкции из конвейера.

Процесс — это экземпляр программы, выполняемой на компьютере.

Поток — это единица выполнения внутри процесса.

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

На следующем рисунке показан процесс выполнения программы Python на компьютере:

До сих пор мы в наших статьях разрабатывали программы с одним процессом и одним потоком. В таких ситуациях термины процесс и поток взаимозаменяемы.

У программы может быть один или несколько процессов, а у процесса может быть один или несколько потоков.

Когда у программы несколько процессов, это называется мультпроцессингом. Если у программы несколько потоков, это называется многопоточностью.

Одноядерные процессоры

Раньше у процессоров было только по одному ядру. Это означало, что один процессор одновременно может выполнять только один процесс.  Для выполнения нескольких процессов как бы «одновременно» ОС использовала программный компонент — планировщик:

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

Многоядерные процессоры

Сегодня у центрального процессора обычно несколько ядер: например, два ядра (тогда он двухъядерный) или четыре ядра (тогда он четырехъядерный).

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

Например, двухъядерный процессор может одновременно выполнять ровно два процесса, а четырехъядерный — не более четырех.

При многопроцессорной обработке используется многоядерный процессор в рамках одного компьютера, который действительно выполняет несколько процессов параллельно.

Задачи, привязанные к процессору, и задачи, привязанные к вводу/выводу

Все программы выполняют два типа задач: связанные с вводом-выводом (I/O-bound) или связанные с процессором (CPU-bound).

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

Технически, многопоточность подходит для процессов, связанных с вводом/выводом, а многопроцессорность — для процессов, связанных с процессором.

Отличия процесса и потока

В следующей таблице показаны основные различия между процессом и потоком:

Критерий сравнения Процесс Поток
Совместное использование памяти Память не разделяется между процессами Память разделяется между потоками внутри одного процесса
Объем потребляемой памяти Большой Маленький
Для каких задач Задачи, привязанные к процессору Задачи, привязанные к вводу/выводу
Время начала работы Медленнее, чем у потока Быстрее, чем у процесса
Прерываемость Дочерние процессы можно прервать Потоки нельзя прервать

Что нужно запомнить

  • Процесс — это экземпляр программы, запущенной на компьютере.
  • У программы может быть один или несколько процессов.
  • Поток — это единица выполнения в процессе.
  • У процесса может быть один или несколько потоков.
codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©