Расскажу, зачем понадобился собственный асинхронный рантайм на Rust. Разберем цикл выполнения задач, их пробуждение из других потоков, а также отправку I/O-операций в ядро через io_uring и обработку результатов их выполнения. Особое внимание уделим provided-буферам, сокращению количества аллокаций, а также багам ядра Linux, с которыми мы столкнулись. Обсудим самые сложные части реализации — отмену операций, завершение рантайма и время жизни ресурсов, которыми ещё пользуется ядро. На бенчмарках сравним производительность нашего рантайма, compio и tokio.