Форум сайта python.su
asyncio использует все доступные ядра? Или как нити только 1?
Офлайн
ivanzzzz
Вы очень сильно путаете понятия. Нити, как раз, могут использовать все ядра процессора, более того - в этом их преимущество. Проблема нитей в том, что во-первых есть оверхед на переключение контекста (внутри ядра), во-вторых есть проблемы с конкурентным доступом к данным. Фактически, на некоторых задачах, нити не дают выигрыша в производительности. Асинхронная программа выполняется в одном потоке и процессе, она не распараллеливается и поэтому никак не может выполняться одновременно на нескольких ядрах. Преимущество асинхронности проявляется на задачах, в которых поток выполнения преимущественно ждет результатов какого-то стороннего процесса, например ответа на запрос к БД или ввода данных пользователем. В этом случае (когда наступил момент ожидания) асинхронная программа переключается на выполнение другой задачи и не тратит процессорное время на нагрев воздуха.
Офлайн
FishHook:) ни один вариант не угадал!
использует все доступные ядра? Или как нити только 1?
Офлайн
FishHookСудя по видео https://youtu.be/ys8lW8eQaJQ?t=7m29s GIL не дает нитям использовать больше 1 ядра.
ivanzzzzВы очень сильно путаете понятия. Нити, как раз, могут использовать все ядра процессора, более того - в этом их преимущество.
Офлайн
ivanzzzz
Я вам говорил про потоки в принципе, а не в питоне. В питоне они вообще практически бесполезны и их редко используют.
Офлайн
FishHookок буду знать, но я все в контексте питона
ivanzzzzЯ вам говорил про потоки в принципе, а не в питоне. В питоне они вообще практически бесполезны и их редко используют.
Офлайн
FishHook:) Не совсем соглашусь, или совсем не соглашусь. GIL отпускается когда вызываются модули расширения (скомпилированные dll/so) А поскольку если чтото долго считается то его первым делом компилируют то вполне даже часто используется многопоточность и вполне она имеет смысл.
В питоне они вообще практически бесполезны и их редко используют.
Отредактировано doza_and (Окт. 12, 2017 22:09:27)
Офлайн