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

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

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

Ну и вообще стоит ли оно того? - asyncio жрет меньше ресурсов.
Xion
doza_and, поздравляю, вы меня запутали еще больше
“ожидание” для меня новое понятие
threading для меня представляется как деление программы на подпрограммы, которые могут выполняться одновременно, затем выводить результат в общий поток, а в чем значение “ожидания” в этом всем?
4kpt_IV
Ожидание
Пример: Получение данных из БД.
Пример: Получение данных с другого сервиса по http.

P.S. Никто Вас не путал
FishHook
Xion
Xion
деление программы на подпрограммы, которые могут выполняться одновременно
Xion
“ожидание” для меня новое понятие
Дело в том, что на одном процессоре (в современном понимании на одном ядре процессора) одновременно несколько задач выполняться не может физически. Потоки фактически делят процессорное время на небольшие отрезки и выполняются последовательно и не имеет значения, чем они в это время заняты, может быть поток не делает вообще ничего полезного. Пока один поток выполняется, остальные, естественно, ожидают. Кроме того, в питоне есть глобальный блокировщик интерпретатора (GIL) который скорее всего сведет на нет все ваши попытки ускорить выполнение программы разделив её на потоки. В отличие от потоков асинхронное выполнение кода подразумевает, что подпрограммы выполняют только полезную работу и переключение между ними осуществляется в момент, когда подпрограмма начинает ожидать некоего внешнего воздействия. Таким образом добиваются эффективного использования процессора и кажущейся параллельности выполнения задач. Если интересует эта тема, почитайте книгу Twisted Network Programming Essentials, там популярно объясняют что к чему и зачем.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB