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

Поделиться
HTML-код
  • Опубликовано: 23 май 2022
  • Подробнее о конференции C++ Russia: jrg.su/W8skjE
    - -
    В последние годы практически во всех языках программирования набирают популярность асинхронные движки с корутинами.
    Давайте взглянем, как эти движки устроены и что в них хорошего для I/O-bound-приложений. Мы посмотрим, как люди жили до современных корутин, рассмотрим базовые компоненты асинхронного движка и окунемся в дивный мир движковых оптимизаций и хитростей.
    В докладе ожидается:
    - использование стека как «кучи»;
    - мьютексы, которые не блокируют потоки;
    - таймеры и поколения;
    - отмены.

Комментарии • 12

  • @user-nh5yb2uv4b
    @user-nh5yb2uv4b 2 года назад +5

    Не знаю на сколькой Антон знает С++(по мне на 12). Но что точно, он лучший методист эва. Одна фраза, что корутины это хитрые коллбеки, ставит точки в моем понимании это фигни, которую я осознаю в течении полутра лет

  • @TheTimur123

    Вот мое самое простое пояснение для чего нужны корутины - они позволяют не терять время, а переключаться с текущей задачи на другую, если ты видишь, что текущая задача пока еще не скоро решится. Вот пример. Вы начали летом стоить дом на даче, вам важно те терять летние дни просто так впустую. Вы начали строительство и чувствуете, что вам нужна какая то штука (допустим уровень), который лежит в сарае. Эта штука вам нужна не прям очень срочно, но тем не менее она нужна полюбому будет сегодня. И вот у вас какой то этап работ уже завершен (допустим, Вы смазали специальным составом доски от гниения так называемым антисептиком). И у вас есть выбор или отдохнуть или начать делать что то другое по строительству (например, размечать место будущего дома) или искать уровень, так как он Вам так и так сегодня будет нужен и его полюбому надо будет найти. И вот вы решили, что отдыхать это непозволительная роскошь, и надо скорей найти уровень в сарае, заодно и прогуляться до сарая как раз отдохнешь пока ходишь. Вы рассчитывали, что зайдя в сарай Вы найдете уровень за 5 секунд, однако, зайдя в сарай, Вы увидели, что там бардак и в первые 30 сек уровень найти не удалось. И тут вы принимаете решение - или продолжать искать уровень в сарае (но еще неизвестно сколько это займет времени, быть может весь день и тогда Вы рискуете потерять весь день на не самую важную задачу), или же хрен с ним с уровнем (найдем потом!) и идти пока еще не зашло Солнце делать другой этап работы (например, размечать место установки фундамента). Без корутин Вы если зашли в сарай (зашли в функцию ) Вы уже не можете выйти пока не найдете эту вещь, вы зависаете на поиске этой вещи и возможно надолго. Вы как бы что то и делаете, и в тоже время вы понимаете, что вы теряете время зря. С корутинами же можно сделать вот так - вы можете приостановить поиск и спокойно выйти из сарая (вы уже осмотрели часть сарая и там не нашли уровень), и пойдете заниматься более важным - размечать фундамент. В то же время, Вы можете позвонить другу и сказать, слушай помоги, я тут размечаю фундамент, но уже скоро мне понадобиться уровень, но я не знаю где он там, я не могу зависнуть на поиске, иначе зайдет солнце и я не успею разметить фундамент, помоги мне найти уровень, ключи от сарая воткнуты в двери! И вы спокойно продолжаете размечать фундамент, а Ваш друг заходит в сарай и продолжает искать уровень с того места, где вы остановились. А вы не теряете на это время. То есть корутины позволяют делать вот что - если произошла какая то непонятка по текущей подзадаче, то вы можете поставить эту подзадачу на паузу и вернуться к ней, когда возникнет очередной перерыв в основной задаче. То есть вам не важно именно прям сейчас найти что то в сарае, вы можете прекратить поиск и продолжать строить дом на до того момента, пока уровень еще не нужен (например, подготавливать доски), и вернуться продолжить поиск инструмента в сарае как будет возможность позже (ну или сразу попросить друга).

  • @jbystr

    Спасибо за видео! Несущественное замечание - нюанс без мягкого знака.

  • @radiopapus

    На 35 минуте есть фраза "можно использовать стек как кучу". Может кто-нибудь подробнее рассказать значение этой фразы? Корутина никогда не делает return, соотв. стек не будет очищаться, а размер стека ограничен. Заранее спасибо.

  • @TheTimur123

    Смотрел лекцию по асинхронным процессам и вот там такое встретилось - если функция заблокировалась, например, функция приема чего то там по сети, а ни одного клиента нет, то мы висим и ждем, и тогда происходит вот что - операционная система понимает это и чтоб не терять время и не висеть просто так, она делает context switch (переключение контекста). И вот у меня такой вопрос - А как она понимает, что вот уже пора делать это переключение контекста? Там зашита какая то величина таймера? Ну типа - любой функции разрешено висеть не больше 1 секунды, если 1 секунда прошла, а функция не разморозилась (так как она все еще ожидает что то там по сети, а это что то там так и не приходит и не приходит), то операционная система говорит - слышь ты, хорош тут висеть, я тебя временно снимаю с процессора, там есть другие задачи. То есть мне не понятно конкретно вот что - кто решает сколько можно висеть функции на блокировке ? Это зашито прям в ядре ОС?

  • @senioreasy
    @senioreasy 2 года назад

    29:37

  • @senioreasy
    @senioreasy 2 года назад +1

    29:22

  • @p.polunin
    @p.polunin Год назад

    33:01