Форум сайта python.su
Может кто нибудь объяснить на пальцах разницу? И почему многие проекты переходят на использование asyncio, ведь в плане производительности разница с threading практически отсутствует
Вот пример сравнения: https://stackoverflow.com/questions/26154125/why-is-the-asyncio-library-slower-than-threads-for-this-i-o-bound-operation
Теорию я более менее понял, но мне не понятна реализация, дайте примеров, либо ссылки на понятные объяснения практического использования asyncio
Ну и вообще стоит ли оно того?
Офлайн
253
Если грубо
asyncio - Для задачек в которых ожидание вызвано операциями ввода вывода
threading - Для задачек в которых ожидание вызвано занятостью ядер процессора.
Ну и вообще стоит ли оно того? - asyncio жрет меньше ресурсов.
Отредактировано doza_and (Янв. 29, 2016 19:40:07)
Офлайн
doza_and, поздравляю, вы меня запутали еще больше
“ожидание” для меня новое понятие
threading для меня представляется как деление программы на подпрограммы, которые могут выполняться одновременно, затем выводить результат в общий поток, а в чем значение “ожидания” в этом всем?
Офлайн
49
Ожидание
Пример: Получение данных из БД.
Пример: Получение данных с другого сервиса по http.
P.S. Никто Вас не путал 
Отредактировано 4kpt_IV (Янв. 29, 2016 22:57:34)
Офлайн
568
Xion
Xion
деление программы на подпрограммы, которые могут выполняться одновременно
XionДело в том, что на одном процессоре (в современном понимании на одном ядре процессора) одновременно несколько задач выполняться не может физически. Потоки фактически делят процессорное время на небольшие отрезки и выполняются последовательно и не имеет значения, чем они в это время заняты, может быть поток не делает вообще ничего полезного. Пока один поток выполняется, остальные, естественно, ожидают. Кроме того, в питоне есть глобальный блокировщик интерпретатора (GIL) который скорее всего сведет на нет все ваши попытки ускорить выполнение программы разделив её на потоки. В отличие от потоков асинхронное выполнение кода подразумевает, что подпрограммы выполняют только полезную работу и переключение между ними осуществляется в момент, когда подпрограмма начинает ожидать некоего внешнего воздействия. Таким образом добиваются эффективного использования процессора и кажущейся параллельности выполнения задач. Если интересует эта тема, почитайте книгу Twisted Network Programming Essentials, там популярно объясняют что к чему и зачем.
“ожидание” для меня новое понятие
Офлайн