My Tech Journal - November 2026
My Tech Journal - November 2026 Edition
Rust
-
Completion-based IO (Alice Ryhl at RustWeek) RustNL
In this presentation, Alice Ryhl provides an overview of the two different approaches to async IO: readiness-based and completion-based.
• For many years, the most widely used IO APIs on Linux were based on the readiness model. e.g. select, poll, epoll
• In 2019, io_uring - added completion based APIs to Linux.
• In the readiness-based IO, the waiting happens in the application (user-space), whereas
in the completion-based IO, the waiting happens in the kernel-space.
• Tokio async runtime for Rust is based on the readiness model.
• Compio is an async runtime for Rust built with completion-based IO. -
She also explains different options to implement completion-based async IO in Rust correctly.
• Option 1: Keep using old IO traits with an extra copy
• Option 2: Not all IO would be completion based; and keep compatibility at a higher layer
• Option 3: Keep using readiness-based IO for scenarios where it makes sense e.g. TCPStream
• Option 4: Use the appropriate IO model for every use-case