Skip to content
/ zedio Public

A runtime for writing asynchronous applications with Modern C++, based on C++20 coroutine and liburing (io-uring)

License

Notifications You must be signed in to change notification settings

8sileus/zedio

Repository files navigation

Zedio

C++23 Platform

______ ______ _____ _____ ____
|___ / | ____| | __ \ |_ _| / __ \
/ / | |__ | | | | | | | | | |
/ / | __| | | | | | | | | | |
/ /__ | |____ | |__| | _| |_ | |__| |
/_____| |______| |_____/ |_____| \____/

Documentation:https://8sileus.github.io/zedio/

Zedio is an event-driven header library for writing asynchronous applications in modern C++:

Feature:

  • Multithreaded, work-stealing based task scheduler. (referencetokio)
  • Proactor event handling backed byio_uring.
  • Zero overhead abstraction, no virtual, no dynamic

Sub library:

  • I/O
  • NetWorking
  • FileSystem
  • Time
  • Sync
  • Log

It's being developed, if you're interested in zedio and want to participate in its development, seecontributing

Example

//An echo server
//Ignore all errors
#include"zedio/core.hpp"
#include"zedio/net.hpp"

usingnamespacezedio;
usingnamespacezedio::async;
usingnamespacezedio::net;

autoprocess(TcpStream stream) -> Task<void> {
charbuf[1024]{};
while(true) {
autolen = (co_await(stream.read(buf))).value();
if(len ==0) {
break;
}
co_awaitstream.write_all({buf, len});
}
}

autoserver() -> Task<void> {
autoaddr =SocketAddr::parse("localhost",9999).value();
autolistener =TcpListener::bind(addr).value();
while(true) {
auto[stream, addr] = (co_awaitlistener.accept()).value();
spawn(process(std::move(stream)));
}
}

automain() -> int {
//zedio::runtime::CurrentThreadBuilder::default_create().block_on(server());
zedio::runtime::MultiThreadBuilder::default_create().block_on(server());
}

About

A runtime for writing asynchronous applications with Modern C++, based on C++20 coroutine and liburing (io-uring)

Topics

Resources

License

Stars

Watchers

Forks

Languages