#7 - Многопоточность vs Async
Відеоурок
Асинхронное программирование и многопоточность решают одну задачу — выполнение нескольких операций без блокировки программы, но делают это по-разному. Понимание этой разницы критически важно для выбора правильного подхода.
Многопоточность (threading) использует несколько потоков внутри одного процесса. Это создаёт ощущение параллельной работы, однако в Python есть ограничение — GIL (Global Interpreter Lock). Он не позволяет одновременно выполнять Python-код в нескольких потоках, из-за чего многопоточность плохо подходит для тяжёлых вычислений.
Тем не менее, threading эффективен в задачах с ожиданием: работа с сетью, файлами или API. Пока один поток ждёт, другой может выполняться, что даёт ускорение.
Асинхронное программирование работает иначе. Здесь используется один поток и цикл событий (event loop), который переключается между задачами в моменты ожидания. Благодаря этому можно выполнять множество операций без создания потоков, что делает код более лёгким и масштабируемым.
В async задачи могут завершаться не по порядку. Например, если одна задача ждёт 2 секунды, а другая — 1 секунду, вторая завершится раньше, даже если была запущена позже. Это ключевая особенность асинхронного подхода.
Выбор зависит от задачи: async лучше подходит для I/O (запросы, базы, боты), threading — когда нельзя использовать async. Для вычислительно сложных задач стоит использовать multiprocessing, так как он обходит ограничения GIL.
Матеріали для курсу
Щоб завантажувати матеріали до відеокурсів, необхідно оформити підписку на сайт
Завдання до уроку
Необхідно оформити передплату на проект, щоб отримати доступ до всіх домашніх завдань
Велике завдання за курсом
Вам необхідно оформити передплату на сайті, щоб мати доступ до всіх великих завдань. У завдання входить методика рішення, а також готовий проект з відповіддю до завдання.
PS: подібні завдання доступні при підписці від 1 місяця
Також варто подивитися