Пишем свой asyncio/изучение асинхронного программирования

Пишем свой asyncio/изучение асинхронного программирования

YeahNotSewerSide

Введение

При написании кода, особенно при написании оптимизированных приложений, которые используют, например, сеть (клиент/серверные приложения), очень остро встает вопрос о многозадачности, в случае с сервером - <<как написать сервер, который может обрабатывать большое количество клиентов одновременно>>. Данные проблемы решаются программистами при помощи многопоточности или асинхронного программирования, и если многопоточные приложения особо вопросов не вызывают, то асинхронное программирование остается "черным ящиком" для многих, не только начинающих, кодеров.

В данной статье я как раз и расскажу, как работает асинхронное программирование и даже напишу простой "asyncio" на питоне.
Статья будет поделена на несколько частей, это первая часть, в которой мы разберем принцип асинхронного программирования и напишем базовый код, который умеет запускать корутины.

Часть 1. Основы.

Начнем с разбора отличий мультипоточных приложений от асинхронных.

Итак, многопоточные приложения, при создании каждого потока мы делегируем управление этим потоком операционной системе, а ОС уже сама решает где ей нужно дать процессорное время потоку, где ей нужно остановить поток, ну и на каком ядре выполнять поток. Асинхронное программирование отличается тем, что все эти махинации нужно выполнять самому программисту, а не ОС. Чем же тогда асинхронное программирование лучше, если нам нужно делать больше работы при написании кода? Все просто, в асинхронных приложениях программист может глубже оптимизировать код, вообще асинхронное программирование применяется в задачах, где у нас фигурируют такие процессы как "чтение жесткого диска" "общение через интернет соединение" т.е. это задачи, в которых нам нужно долго ждать ответа на какой-то запрос, и асинхронное программирование позволяет оптимизировать данный процесс при помощи выполнения другого кода во время этого ожидания.












Report Page