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

Если мы внимательно посмотрим на эту статистику компьютера в одном экземпляре (точке). Мы видим 2640 потоков и (196 процессов) работают на 4 ядрах. Так как же это происходит?

Для понимания рассмотрим пример. Типичный четырехъядерный процессор состоит из 4 вычислительных ядер на одном кристалле. Теперь эта куча (2640) потоков полагается на эти 4 ядра для выполнения. Но в любой момент максимум они могут выполнять только 4 потока (по 1 потоку на каждое ядро). Это когда ядра начинают переключаться между потоками, чтобы противостоять этой проблеме.

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

Преимущество переключения тем

Это повышает общую производительность и приводит к более быстрому выполнению инструкций. Допустим, ядро ​​1 выполняет поток t1. И поток t1 останавливается (приостанавливается) на 10 секунд из-за метода сна или для принятия какого-либо ввода. Затем ядро ​​1 может переключиться на выполнение потока t2, а не простаивать.

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

Реализация многопоточности в Python

threadfunction запускается как новый поток, но останавливается на 10 секунд. Таким образом, ядро ​​обращается к основному потоку, чтобы напечатать main. Ядро просто не простаивает 10 секунд, чтобы выполнить функция потока, оно предпочитает переключиться.