В статье разобрано, как написать микро async-runtime с нуля на macOS, используя
kqueue. Отличный материал, чтобы наконец понять, что происходит под async/await.Что он реализует
Минимальный, но полноценный стек:
- event loop — сердце рантайма
- poller — ждёт события от ОС
- reactor — связывает I/O-события и задачи
- tasks — единицы работы (future’ы)
- wakers — механизм «разбудить задачу»
- executor — запускает и перепланирует задачи
Обычно мы используем готовые рантаймы вроде или, не задумываясь, как они работают.
Здесь же видно:
- как
kqueue сигналит о готовности сокета - как future переходит из Pending в Ready
- как waker возвращает задачу в очередь
- как executor крутит цикл выполнения
После такого разборa
async в Rust перестаёт быть «чёрной коробкой».Статья: https://michaelhelvey.dev/posts/rust_async_runtime
michaelhelvey.dev/posts/rust_async_runtime
#rust #rustlang
