C++ Asynchronous System Call Layer for Linux, Powered by io_uring and C++20 Coroutines
Condy is designed to provide an intuitive, high-performance coroutine runtime on top of io_uring:
- 🛠️ Comprehensive io_uring Integration Designed to integrate and maintain support for most io_uring features, with ongoing updates to track kernel and liburing advancements.
- 🏃 Low Overhead Efficient template-based abstractions and precise lifetime management eliminate nearly all heap allocations outside coroutine frames, resulting in extremely low runtime overhead.
- 💡 Intuitive Programming Model Write asynchronous code in a direct, readable style using C++20 coroutines—no callbacks. Friendly APIs, high-level combinators, and channels make complex async flows easy to express.
Quick Start
std::string msg = "Hello, Condy!\n";
}
Coroutine type used to define a coroutine function.
Definition coro.hpp:26
Main include file for the Condy library.
auto async_write(Fd fd, Buffer &&buf, __u64 offset)
See io_uring_prep_write.
Definition async_operations.hpp:386
T sync_wait(Runtime &runtime, Coro< T, Allocator > coro)
Synchronously wait for a coroutine to complete in the given runtime.
Definition sync_wait.hpp:24
MutableBuffer buffer(void *data, size_t size)
Create a buffer object from various data sources.
Definition buffers.hpp:84
# Make sure liburing (>=2.3) is installed on your system
# On Ubuntu: sudo apt install liburing-dev
clang++ hello.cpp -o hello -std=c++20 -luring -I./include
./hello
# Hello, Condy!
See Documentation for more details.
Documentation
Support
- For questions, bug reports, or feature requests, please open an issue.
- Pull requests are welcome!