Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2017 05:37:02

ivanzzzz
Зарегистрирован: 2016-08-23
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Сколько ядер задействует asyncio?

asyncio использует все доступные ядра? Или как нити только 1?

Офлайн

#2 Окт. 10, 2017 06:08:20

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

Сколько ядер задействует asyncio?

ivanzzzz
Вы очень сильно путаете понятия. Нити, как раз, могут использовать все ядра процессора, более того - в этом их преимущество. Проблема нитей в том, что во-первых есть оверхед на переключение контекста (внутри ядра), во-вторых есть проблемы с конкурентным доступом к данным. Фактически, на некоторых задачах, нити не дают выигрыша в производительности. Асинхронная программа выполняется в одном потоке и процессе, она не распараллеливается и поэтому никак не может выполняться одновременно на нескольких ядрах. Преимущество асинхронности проявляется на задачах, в которых поток выполнения преимущественно ждет результатов какого-то стороннего процесса, например ответа на запрос к БД или ввода данных пользователем. В этом случае (когда наступил момент ожидания) асинхронная программа переключается на выполнение другой задачи и не тратит процессорное время на нагрев воздуха.



Офлайн

#3 Окт. 10, 2017 08:48:33

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

Сколько ядер задействует asyncio?

FishHook
использует все доступные ядра? Или как нити только 1?
:) ни один вариант не угадал!
Я так понимаю что при запуске есть два треда (дополнительный для обслуживания пулов экзекюторов). Но можете задействовать сколько хотите.
см.
run_in_executor



Офлайн

#4 Окт. 12, 2017 10:55:38

ivanzzzz
Зарегистрирован: 2016-08-23
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Сколько ядер задействует asyncio?

FishHook
ivanzzzzВы очень сильно путаете понятия. Нити, как раз, могут использовать все ядра процессора, более того - в этом их преимущество.
Судя по видео https://youtu.be/ys8lW8eQaJQ?t=7m29s GIL не дает нитям использовать больше 1 ядра.

Офлайн

#5 Окт. 12, 2017 14:23:01

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

Сколько ядер задействует asyncio?

ivanzzzz
Я вам говорил про потоки в принципе, а не в питоне. В питоне они вообще практически бесполезны и их редко используют.



Офлайн

#6 Окт. 12, 2017 18:44:41

ivanzzzz
Зарегистрирован: 2016-08-23
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Сколько ядер задействует asyncio?

FishHook
ivanzzzzЯ вам говорил про потоки в принципе, а не в питоне. В питоне они вообще практически бесполезны и их редко используют.
ок буду знать, но я все в контексте питона

Офлайн

#7 Окт. 12, 2017 22:09:07

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

Сколько ядер задействует asyncio?

FishHook
В питоне они вообще практически бесполезны и их редко используют.
:) Не совсем соглашусь, или совсем не соглашусь. GIL отпускается когда вызываются модули расширения (скомпилированные dll/so) А поскольку если чтото долго считается то его первым делом компилируют то вполне даже часто используется многопоточность и вполне она имеет смысл.



Отредактировано doza_and (Окт. 12, 2017 22:09:27)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version