Корутины – это про конкурентное выполнение. Конкурентность != многопоточность.
Ну да. Выполнение асинхронного кода в синхронном стиле
То есть вы хотите сказать что если в фоновом потоке происходят вычисления,в главном пользователь колупает в носу то эта система с двумя потоками не многопоточная а конкурентная?.
Нет. Хотя фактически треды в питоне это инструмент вытесняющей конкурентности, но думаю пока этот момент можно опустить
Я из мира андроид и мне не очень понятна ваша логика
Я думаю в питоне нет таких концепций которых не было бы в джаве, так что странный комментарий.
Я поэтому и пытаюсь у вас узнать разницу между конкурентностью и многопоточностью.что вы понимаете под первым словом
Конкурентного выполнения работы ты можешь достигнуть не обязательно через "честный" параллелизм на ядрах. https://en.wikipedia.org/wiki/Preemption_(computing)
разница в том что конкурентность это свойство системы, а многопоточность *одна из* ее реализаций.
Краткие сведения о GIL: Одновременно может выполняться один поток. Интерпретатор Python переключается между потоками для достижения конкурентности. GIL применим к CPython (стандартной реализации). Но такие как, например, Jython и IronPython не имеют GIL. GIL делает однопоточные программы быстрыми. Операциям ввода/вывода GIL обычно не мешает. GIL позволяет легко интегрировать непотокобезопасные библиотеки на C, благодаря GIL у нас есть много высокопроизводительных расширений/модулей, написанных на C. Для CPU зависимых задач интерпретатор делает проверку каждые N тиков и переключает потоки. Таким образом один поток не блокирует другие. корутины - потоки между которыми переключает контекст программы в GIL чем и достигается конкурентность просто потоки выполняют задачу без конкурентности в питоне 3 корутины - потоки для asyncio, которые сэкономят времени на выполнении I/O операций
> Одновременно может выполняться один поток. Нет.
ок, ты взломал GIL или свой написал?
> Одновременно может выполняться один поток. чушь собачья
Например гил отпускается на IO-задачах.
нет, внезапно те потоки которые не захватывают GIL могут выполняться параллельно (если аппаратура позволяет)
Для этого только надо аффинити вырубать, не?
а при чем тут аффинити?
если бы в питоне GIL разрешал паралельно работать с одным объектом, то получали бы часто race condition
Притом, что процесс припинен к ядру, то есть ничего реально в параллель на других ядрах не запускается, пока он выставлен
только с чего ты взял что интерпретатор выставляет аффинити по-умолчанию?
Ну да. Или по-твоему в той же джаве гонок данных быть не может?
Ну, раньше это точно так было, потому что параллельный расчёт тензоров на нумпи начинался с отпускания этого самого аффинити, несмотря на то, что в потоках не питонокод
Еще один момент про многопоточность в питоне - если тебе прям она нужна "честная" без гил, то ты можешь этого добиться через сишные модули-расширения. Вот по-моему всякие нампаи таким занимаются.
а напомните основа реализации мат. библиотек не С часом? а не на С расширениях можно обходить гил и считать формулы быстрее?
мы вообще не про это. Аффинити никак не связано с гилом, это фишка ОС
Опять же, ускорение выполнения кода это большая тема и, насколько знаю, параллельное выполнение кода это не первый способ который должен рассматриваться. В крайнем случае CPUbound задачи можно расшарить между множеством процессов.
с точностью до закона Амдала только
сорри, но примерно все перечисленные пункты неверные
нууу было бы крайне странно если бы интерпретатор пытался заигрывать с аффинити без контроля разработчика. поэтому вероятность что одна из веселых датасайентистских зависимостей это проделывала куда более высокая.
вполне может быть. Но вообще это был бы хитрый ход - формально нет смысла запускаться *без* аффинити, потому что и так в 90% случаев параллелиться ничего не будет из-за GIL. А без него заимеем проблемы с когерентностью кэшей на ядрах и оверхед на системном шедулере
> Jython и IronPython Так протухло же! Можно выносить
Обсуждают сегодня