Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 29, 2016 18:32:04

Xion
Зарегистрирован: 2016-01-17
Сообщения: 21
Репутация: +  0  -
Профиль  

asyncio vs threading

Может кто нибудь объяснить на пальцах разницу? И почему многие проекты переходят на использование asyncio, ведь в плане производительности разница с threading практически отсутствует
Вот пример сравнения: https://stackoverflow.com/questions/26154125/why-is-the-asyncio-library-slower-than-threads-for-this-i-o-bound-operation

Теорию я более менее понял, но мне не понятна реализация, дайте примеров, либо ссылки на понятные объяснения практического использования asyncio

Ну и вообще стоит ли оно того?

Офлайн

#2 Янв. 29, 2016 19:38:36

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

asyncio vs threading

Если грубо
asyncio - Для задачек в которых ожидание вызвано операциями ввода вывода
threading - Для задачек в которых ожидание вызвано занятостью ядер процессора.

Ну и вообще стоит ли оно того? - asyncio жрет меньше ресурсов.



Отредактировано doza_and (Янв. 29, 2016 19:40:07)

Офлайн

#3 Янв. 29, 2016 20:34:09

Xion
Зарегистрирован: 2016-01-17
Сообщения: 21
Репутация: +  0  -
Профиль  

asyncio vs threading

doza_and, поздравляю, вы меня запутали еще больше
“ожидание” для меня новое понятие
threading для меня представляется как деление программы на подпрограммы, которые могут выполняться одновременно, затем выводить результат в общий поток, а в чем значение “ожидания” в этом всем?

Офлайн

#4 Янв. 29, 2016 22:57:11

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

asyncio vs threading

Ожидание
Пример: Получение данных из БД.
Пример: Получение данных с другого сервиса по http.

P.S. Никто Вас не путал

Отредактировано 4kpt_IV (Янв. 29, 2016 22:57:34)

Офлайн

#5 Янв. 30, 2016 09:56:59

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

asyncio vs threading

Xion

Xion
деление программы на подпрограммы, которые могут выполняться одновременно
Xion
“ожидание” для меня новое понятие
Дело в том, что на одном процессоре (в современном понимании на одном ядре процессора) одновременно несколько задач выполняться не может физически. Потоки фактически делят процессорное время на небольшие отрезки и выполняются последовательно и не имеет значения, чем они в это время заняты, может быть поток не делает вообще ничего полезного. Пока один поток выполняется, остальные, естественно, ожидают. Кроме того, в питоне есть глобальный блокировщик интерпретатора (GIL) который скорее всего сведет на нет все ваши попытки ускорить выполнение программы разделив её на потоки. В отличие от потоков асинхронное выполнение кода подразумевает, что подпрограммы выполняют только полезную работу и переключение между ними осуществляется в момент, когда подпрограмма начинает ожидать некоего внешнего воздействия. Таким образом добиваются эффективного использования процессора и кажущейся параллельности выполнения задач. Если интересует эта тема, почитайте книгу Twisted Network Programming Essentials, там популярно объясняют что к чему и зачем.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version