Процесс — это запущенный экземпляр любой программы, потребляющий процессорное время. А фрагмент процесса, который может выполняться независимо, — это поток.
Если мы внимательно посмотрим на эту статистику компьютера в одном экземпляре (точке). Мы видим 2640 потоков и (196 процессов) работают на 4 ядрах. Так как же это происходит?
Для понимания рассмотрим пример. Типичный четырехъядерный процессор состоит из 4 вычислительных ядер на одном кристалле. Теперь эта куча (2640) потоков полагается на эти 4 ядра для выполнения. Но в любой момент максимум они могут выполнять только 4 потока (по 1 потоку на каждое ядро). Это когда ядра начинают переключаться между потоками, чтобы противостоять этой проблеме.
Каждое ядро будет запускать несколько потоков один за другим. Выполнение потока t1 (скажем) в один момент, затем потока t2 (скажем) в следующий момент и так далее. Но это переключение происходит молниеносно, за наносекунды.
Преимущество переключения тем
Это повышает общую производительность и приводит к более быстрому выполнению инструкций. Допустим, ядро 1 выполняет поток t1. И поток t1 останавливается (приостанавливается) на 10 секунд из-за метода сна или для принятия какого-либо ввода. Затем ядро 1 может переключиться на выполнение потока t2, а не простаивать.
В конце концов, многопоточность — это выполнение нескольких потоков на одном ядре.
Реализация многопоточности в Python
threadfunction запускается как новый поток, но останавливается на 10 секунд. Таким образом, ядро обращается к основному потоку, чтобы напечатать main. Ядро просто не простаивает 10 секунд, чтобы выполнить функция потока, оно предпочитает переключиться.