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

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

YeahNotSewerSide

Рассмотрим как это работает.

Допустим у нас есть 2 задачи, первая отсылает HTTP запрос и получает ответ от сервера. А вторая задача в этоже время, читает какие-то данные с жесткого диска. Представим, что у нас есть некоторая "очередь" queue по формуле Первый-пришел-Первый-ушел.

Сначала мы добавляем Задачу один и задачу два в queue. А теперь начинаем их по очереди выполнять. Допусти Задача 1 в queue стоит первой [Задача 1, Задача 2], мы достаем ее и начинаем выполнение(1-2) во время выполнения мы доходим до отсылки HTTP реквеста, после отправки оного, мы не ждем пока сервер вернет нам данные, а вместо этого мы кладем Задачу 1 обратно в queue, но в конец. Получаем что в queue у нас [Задача 2, Задача 1]. Теперь достаем первую задачу из queue, это Задача 2, она выплняет какие-то операции(2-5) и доходит до чтения данных с жесткого диска, это относительно долгая операция, представим, что она длится 2 секунды, так как нам надо ее ждать, мы кладем Задачу 2 обратно в queue [Задача 1, Задача 2]. Теперь вынимаем первую задачу, Задача 1, она уже получила данные от сервера, теперь она обрабатывает эти данные(5-7) и заканчивает выполнение, так как задача завершилась, мы не кладем ее обратно в queue. [Задача 2] Достаем первую и единственную задачу Задача 2 и выполняем ее до завершения(7-10)

Таким простым алгоритмом мы смогли добиться того, что у нас уменьшилось время выполнения программы на одноядерном процессоре.


Report Page