Тёмный

Анатомия асинхронных движков - Антон Полухин 

Yandex for Developers
Подписаться 66 тыс.
Просмотров 6 тыс.
50% 1

Тезисы: В последние годы практически во всех языках программирования набирают популярность асинхронные движки с корутинами. Давайте посмотрим, как эти движки устроены и что в них такого хорошего для I/O- bound приложений! Посмотрим, как люди жили до современных корутин, рассмотрим базовые компоненты асинхронного движка, и окунёмся в дивный мир движковых оптимизаций и хитростей:
использование стека как «кучи»;
мьютексы, которые не блокируют потоки;
таймеры и поколения;
отмены.

Опубликовано:

 

12 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 15   
@user-bl4mm5pr9g
@user-bl4mm5pr9g Год назад
Спасибо!
@sovrinfo
@sovrinfo 2 года назад
Спасибо за видео.Коммент в поддержку!
@Alexander-mj3jk
@Alexander-mj3jk 2 года назад
А что под капотом у стакфулл короутин? Каким образом получается сохранить локальные переменные в процедуре?
@rugleb
@rugleb 2 года назад
Создание потока на питоне - не проблема. Проблема в том, что потоки не будут работать параллельно.
@jekapsk
@jekapsk 2 года назад
Смотря какой движок питона использовать) есть реализации без GIL, но тогда придется писать tread-safe код)
@rugleb
@rugleb 2 года назад
@@jekapsk по умолчанию все понимают о каком движке речь) А так конечно, можно пытаться и мертвого воскрешать
@usmanbaybikov9462
@usmanbaybikov9462 2 года назад
Все видео было ощущение , что лектор говорить про шедуллер Go)
@SharplEr
@SharplEr 2 года назад
Ну это одна и так же идея.
@vlad071096
@vlad071096 2 года назад
Где-нибудь можно найти информацию, почему переключение контекста (уровня ОС) такое дорогое? Вот на 5:53, например, написано total costs, including cache invalidation? Какие кеши инвалидируются? В современных процессорах physically-tagged кеши (VIPT или PIPT), их не надо инвалидировать при переключении контекста. TLB для переключения на тред того же процесса инвалидировать не надо, и вообще современные TLB поддерживают теги адресных пространств. У меня ощущение, что для человека "со стороны", который не разрабатывает процессоры или операционные системы, во всем Интернете невозможно найти нормальный ответ на вопрос "зачем нужен user-space scheduling" (корутины, файберы, горутины, или что там в вашей среде есть). В худшем случае будет бредятина про то, что стеки ОС-тредов занимают слишком много памяти (ну да, ведь 2^64 байт - это так мало для масштабируемости), а в лучшем - про инвалидацию кешей.
@cdriper
@cdriper Год назад
я думаю, что главная здесь проблема это race condition или ты сам управляешь переключением в "безопасные" и понятные моменты времени или это делает операционная система (например, посредине инкремента целого числа, который выполняется в две машинные инструкции)
@alexandersmirnov4274
@alexandersmirnov4274 2 года назад
объясните стекфул vs стеклесс корутины?
@cdriper
@cdriper Год назад
стекфул ничем не отличается от классического кода со стеком стеклесс код хранит все "локальные" переменные не на стеке, а в специально отведенном регионе памяти (который обычно располагают в куче) главное преимущество такого подхода -- расход памяти ты должен выделить ровно столько памяти, сколько реально надо для работы конкретной корутины в случае классического стека ты всегда выделяешь на глазок и делаешь это с запасом, что приводит к перерасходу памяти недостатоки стеклесс -- необходимость отмечать все корутины специальным образом и невозможность их использования как обычных методов плюс современные компиляторы, увы, не могут предсказать размер региона под переменные на этапе компиляции и память нужно выделять каким-то образом в рантайме
@olsuhvlad
@olsuhvlad 2 года назад
20:38 - Rust это все отслеживает :)
@olsuhvlad
@olsuhvlad 2 года назад
50:10 - тоже отсутствует в Rust'e :)
@cdriper
@cdriper Год назад
не самый хороший доклад с точки зрения формулирования мыслей и использования терминологии для тех, кто плохо разбирается в теме, может скорее сбить с толка, чем что-то прояснить корутины (особенно stackful) это нифига не колбэки это потоки выполнения, похожие на threads, а корутинный движок это их шедулер
Далее
Ванесса 🆚 Крискас  | WICSUR #shorts
00:42
Вопрос Ребром - Булкин
59:32
Просмотров 1,1 млн
КАК УСТРОЕН TCP/IP?
31:32
Просмотров 89 тыс.