Андрей Давыдов
Компания: JetBrains
Доклад посвящен разбору одной часто встречающейся на практике проблемы — выносу тяжелой операции с UI-потока. Разумеется, сама проблема не нова и даже не уникальна для C++. Но в отличие от языков, со сборкой мусора в C++ необходимо предпринимать нетривиальные усилия для того, чтобы ресурсы, используемые фоновой задачей, но принадлежащие основному потоку, жили достаточно долго. Очевидное решение — использовать повсюду shared_ptr, но иногда требуется что-то потоньше (и поэффективнее).
Еще одна нетривиальная часть работы с фоновыми операциями — реализация отмены. И конечно же, поскольку речь идет о C++, и работа с ресурсами, и поддержка отмены должны быть максимально эффективными, с минимумом аллокаций и mutex-ов.
Мы поочередно рассмотрим, как это все можно написать, с тремя основными механизмами асинхронного программирования: callback-ами, (самописными) future-ами и С++20 корутинами, какие у каждого из подходов tradeoffs. В конце доклада будет затронута модная в последнее время (не только и не столько в C++) концепция Structured Concurrency.
Для понимания части доклада от слушателей ожидается поверхностное знакомство с C++20 корутинами.
Компания: JetBrains
Компания: JetBrains