
Евгений Иванов
Yandex Cloud
Большинство популярных докладов, посвященных корутинам в C++, содержат в названии одно из этих слов: Deciphering, Demystified или Intuition. Как только начинаешь знакомство с корутинами, то понимаешь, что это не кликбейт, а суровая реальность того, как это все сделано в языке, если не использовать библиотечные обертки.
Тем не менее, несмотря на значительную сложность, корутины — очень полезный инструмент в арсенале C++ разработчика. С их помощью мы реализовали TPC-C — самый популярный бенчмарк для баз данных. Реализация сделана для распределенной СУБД YDB, что накладывает высокие требования на производительность самого бенчмарка.
На примере TPC-C разберем несколько подходов: синхронную реализацию, асинхронную на future и пулах потоков и вариант на корутинах. Поговорим о том, где и в каких потоках выполняется код, какие у этого последствия для производительности и сложности, и почему корутины оказались удачным компромиссом для этой задачи. Заодно немного заглянем под капот: посмотрим, во что компилятор превращает coroutine-код, и воспроизведём эту механику вручную, то есть реализуем continuation и state-machine без использования языковых корутин. Это позволит лучше понять, что именно происходит при co_await и откуда берутся ключевые ограничения и возможности. В конце кратко сравним подход с Go и Java.

Yandex Cloud

Yandex Infrastructure