Реализация асинхронного RAII
GlobalCpp
0:00 / 0:00
Реализация асинхронного RAII
304 просмотра · 9 дней назад
GlobalCpp
723 подписчика
304 просмотра · 9 дней назад
Общая информация
Мы также хотим встречаться в реальной жизни! Посетите веб-сайт, чтобы узнать информацию о социальных мероприятиях на этой неделе. Заходите еженедельно, чтобы узнать о новых событиях. Хотите помочь в организации таких мероприятий? Найдите нас в Discord (информация на целевой странице) и помогите нам улучшить взаимодействие и общение.
Пожалуйста, посетите целевую страницу группы: https://globalcpp.github.io для получения всей информации.
На этой неделе
Управление временем жизни в C++ в основном построено на синхронном выходе из области видимости. Конструкторы устанавливают инварианты, деструкторы освобождают ресурсы, а RAII позволяет естественным образом компоновать владение и очистку с обычным потоком управления. Асинхронные системы нарушают эту модель. Само уничтожение может потребовать асинхронной работы, и «просто запустите другую задачу в деструкторе» быстро превращает детерминированное управление временем жизни в неструктурированную фоновую деятельность.
В этом докладе рассматривается реализация асинхронного управления временем жизни в std::execution на основе структуры отправки/входа в область видимости, предложенной в P3955. Вместо того чтобы рассматривать асинхронное создание и уничтожение как частные случаи, модель переосмысливает их как компонуемые асинхронные протоколы, построенные на основе явных асинхронных операций входа и выхода из области видимости. В докладе описывается процесс преобразования этих идей в работающий код, начиная с низкоуровневых абстракций отправителя входа/выхода и постепенно добавляя к ним высокоуровневые средства управления временем жизни. В процессе реализации обнаруживается важная самоподобие в предметной области: высокоуровневые средства управления временем жизни асинхронных процессов сами могут быть выражены через те же низкоуровневые примитивы управления временем жизни асинхронных процессов.
Обсуждение реализации сосредоточено на механизмах, необходимых для реализации этих гарантий: координация асинхронного завершения в рамках структурированного параллелизма, управление частично входящими областями видимости и сохранение детерминированной семантики очистки даже тогда, когда само уничтожение становится асинхронным. Полученная конструкция служит как практическим исследованием управления временем жизни асинхронных процессов, так и примером того, как реализация абстракции может выявить более глубокие структурные свойства, скрытые внутри самой модели.
Этот доклад содержит много кода и предполагает, что у вас есть рабочее понимание std::execution. Он основан на двух предыдущих докладах (в большей степени на втором):
• Towards Async Everything Part 1 - Senders ...
• Towards Async Everything Part 2 - Scopes, ...
И охватывает реализацию нескольких алгоритмов из этой статьи:
https://www.open-std.org/jtc1/sc22/wg...
Также будут сделаны ссылки на эти материалы. Статьи:
https://www.open-std.org/jtc1/sc22/wg...
https://www.open-std.org/jtc1/sc22/wg...
https://www.open-std.org/jtc1/sc22/wg...
О докладчике
Роберт Лихи — системный инженер, работающий с C++, специализирующийся на проектировании библиотек C++ и высокопроизводительной инфраструктуры. За последнее десятилетие он создал финансовые системы, чувствительные к задержкам, внес вклад в запатентованную технологию баз данных и разработал программное обеспечение для обработки и анализа данных финансовых рынков в больших масштабах. Будучи активным членом комитета по стандартам ISO C++, Роберт занимается изучением эволюции библиотек, асинхронного программирования, сетевых технологий и параллельного программирования. В своих докладах он опирается на производственный опыт, чтобы показать, как современные абстракции C++ могут упростить понимание и сопровождение больших систем без ущерба для производительности, оставаясь при этом практичными для внедрения в существующие кодовые базы.
0:00 Введение