Уведомления

Группа в Telegram: @pythonsu

#1 Июль 20, 2021 07:33:58

liriK
Зарегистрирован: 2021-07-20
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Расскажите пожалуйста что такое асинхронность в двух словах и для чего нужны async/await

А то я не понимаю для чего они используются

Офлайн

#2 Июль 20, 2021 09:31:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Расскажите пожалуйста что такое асинхронность в двух словах и для чего нужны async/await

Раньше вот электронная почта была на Яндексе или на Mail.ru. Чтобы узнать (когда смотришь через браузер на ящик), пришло ли новое письмо, нужно было нажать на кнопку “обновить” в браузере или на кнопку “проверить ящик” в самом ящике. Тогда вся страница перезагружалась и там было видно, что есть новое письмо и уже давно пришло. Пока этого не сделаешь, всё будет выглядеть так, будто новых писем нет. Но потом со временем всё изменилось. Стало так, что ты сидишь в ящике и тут раз и тебе начинает просто показывать, что в ящике есть новое письмо. При этом ничего не надо нажимать, оно просто приходит. Это произошло тогда, когда пришла технология AJAX (Asynchronous Javascript and XML) , которая дала возможность наладить общение между браузером и сервером, которое не видно для пользователя. Таким образом, браузер через каждые пять секунд делает запрос на сервере “у тебя есть новая почта?”, а сервер ему отвечает “нет”. Потом через пять секунд он опять у него спрашивает “у тебя есть новая почта?”, сервер говорит ему “да”. Тогда браузер говорит ему “дай мне новую почту”, сервер ему даёт заголовки. Браузер считает эти заголовки и меняет на странице лишь один элемент. И ты видишь вдруг на экране “у вас 2 новых сообщения”, хотя страница не перезагружалась.

Так вот, если ты пишешь что-то на питоне и тебе надо, чтобы ничего не ждало никаких нажатий и действий пользователя, чтобы сделать следующий шаг какой-то, то ты используешь асинхронную модель. Если же тебе всё равно, то ты используешь синхронную модель. Тогда пользователю сначала скажут “нажми цифру один” и будут ждать, пока он её не нажмёт.



Отредактировано py.user.next (Июль 20, 2021 09:34:05)

Офлайн

#3 Июль 20, 2021 13:07:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Расскажите пожалуйста что такое асинхронность в двух словах и для чего нужны async/await

liriK
Смотри, вот твоя программа, это некоторое количество строк синтаксически осмысленного кода, который компьютер может выполнить. В самом обычном “классическом” программировании мы подразумеваем, что строки кода выполняются строго последовательно. Конечно, у нас есть ветвления, циклы и переходы, но ты всегда можешь зная состояние переменных сказать, какая строка кода будет выполнена следующей. Все это выглядит логично, пока твоя программа не станет получать каких-то данных из вне. Например из базы данных. База данных находится на другой машине, и запрос данных занимает некое непредсказуемое время. Если наша программа такая как я написал выше, то в период запроса она будет не делать ничего, просто ждать. Хотя на самом деле это “ожидание” вовсе не означает простой процессора, где-то там будет крутиться цикл, который будет непрерывно проверять не пришли ли данные с ответом и точно так же расходовать энергию, как и любые вычисления вообще. Процессору, вообще пофиг. Смысл асинхронщины - занять процессор полезной работой, вместо гоняния пустого цикла. Вот, например, мы пишем веб-сайт. Предположим, что у нас на сервере один процессор с одним ядром. Это значит, что в конкретный момент времени мы можем обрабатывать один конкретный пользовательский запрос по какой-то ссылке, а если к нам приходит одновременно несколько запросов от нескольких пользователей, то запросы будут копиться в очереди. А что обычно вообще делает бэкенд сайта? Получает запрос по УРЛу, формирует на основании его запрос к БД, получает данные от БД, формирует ответ и возвращает его клиенту. Так вот, пока мы ждем ответ от БД, мы можем начать работать с другим запросом из очереди, а не тупо ждать. Вот для этого и нужны await, это место в программе, где мы временно прерываем выволнение функции (потому что здесь функция ждет ответа из вне) и выполняем другую функцию, которая, например, уже дождалась ответа и мы должны продолжить её выполнение с того момента, где её прервали await-ом



Отредактировано FishHook (Июль 20, 2021 16:29:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version