Этюды о буферизации. Вадим Винник ➠ CoreHard Autumn 2019

Поделиться
HTML-код
  • Опубликовано: 9 фев 2025
  • Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединение ожидающих запросов.
    Практика разработки конкретного приложения может приводить к постановке задачи, которая, в зрелом размышлении, оказывается достаточно общей, чтобы вычленить её в абстракцию, потенциально полезную для множества различных приложений. Приведение решения к виду, пригодному для многократного применения, в отличие от решения, отвечающего нуждам конкретного приложения, требует дополнительных мыслительных усилий по выделению вариативных аспектов задачи, и по их моделированию средствами языка. В докладе представлен опыт реализации трёх абстракций, объединенных общей темой - буферизацией данных при многопоточной обработке. Показан ход мысли от анализа задачи до реализации средствами языка C++17.
    Слайды: www.slideshare...
    Join CoreHard community:
    CoreHard Telegram t.me/corehard_by
    CoreHard Facebook / corehard.by
    CoreHard Vkontakte corehardby
    CoreHard Instagram / corehard.by

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

  • @alex_s_ciframi
    @alex_s_ciframi 6 месяцев назад

    спасибо, очень полезная лекция.
    В своё время всё перечисленное я встречал в своих задачах, пилил собственные решения. Сейчас вижу, что, в принципе, везде я угадал пути решения. Но каждый раз, понятно, долго доходил, как именно поступить. Увидел бы я это видео 15 лет назад :D (ролику всего 4 года, увы)

  • @bumka777
    @bumka777 3 года назад

    Круто.

  • @denominatorb4749
    @denominatorb4749 5 лет назад +4

    Буферизация - это очень простая идиома. В видео же что-то столько всего накручено, что вообще сложно представить когда в этом возникает _реальная_ необходимость, которая _стоила_ бы такого усложнения. ИМХО, этот, как и часть других докладов, нацелен на генерирование и поднятие своей личной стоимости, чем для реального распространения и применения таких идей.

    • @cybernessful
      @cybernessful Год назад

      Сразу видно специалиста ничего сложнее HelloWorld в жизни не создавшего...

  • @VasiliyMelnikov
    @VasiliyMelnikov 5 лет назад

    Решение на 15 сек. может залочиться wait в пустой очереди при захваченном мьютексе не даст сделать put

    • @vadimvinnik
      @vadimvinnik 5 лет назад +2

      (вероятно, имеете в виду 15-ю минуту) Не может. Потому что метод wait ждёт при отпущенном mutex - см. en.cppreference.com/w/cpp/thread/condition_variable/wait. Перед вызовом wait семафор нужно захватить. Под блокировкой wait проверяет предикат. Если условие изначально выполнено - с всё ещё захваченным семафором продолжается выполнение кода после wait. Если же условие оказалось ложным, то wait _отпускает_ семафор и впадает в ожидание сигнала от условной переменной. Какой-то другой поток тем временем меняет состояние (то самое, что защищено семафором; имеет право, т.к. семафор свободен!) таким образом, что предикат может стать истинным, и сигналит через condition_variable всем потокам (их могло бы быть несколько), которые ждали изменения состояния (каждый поток при этом может ждать со своим предикатом). Ожидающий поток (в методе wait) просыпается, захватывает семафор (ведь он сейчас будет смотреть в состояние, общее для нескольких потоков), проверяет предикат.

    • @VasiliyMelnikov
      @VasiliyMelnikov 5 лет назад

      @@vadimvinnik Спасибо за развернутый ответ