GithubHelp home page GithubHelp logo

8sileus / zedio Goto Github PK

View Code? Open in Web Editor NEW
84.0 2.0 8.0 881 KB

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

Home Page: https://8sileus.github.io/zedio/

License: MIT License

CMake 0.43% C++ 98.81% Go 0.20% Rust 0.56%
coroutines framework runtime io-uring asynchronous

zedio's Introduction

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. (reference tokio)
  • Proactor event handling backed by io_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, see contributing

Example

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

using namespace zedio;
using namespace zedio::async;
using namespace zedio::net;

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

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

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

zedio's People

Contributors

8sileus avatar gottyduke avatar uchenily avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

zedio's Issues

condition_variable test case fails

$ ./build/tests/condition_variable_test

2024-03-07 02:07:41.353 INFO 486700 ZEDIO_WORKER_3 /root/zedio/tests/condition_variable_test.cpp:23 pop 9997
2024-03-07 02:07:41.353 INFO 486700 ZEDIO_WORKER_3 /root/zedio/tests/condition_variable_test.cpp:35 push 9998
2024-03-07 02:07:41.353 INFO 486700 ZEDIO_WORKER_3 /root/zedio/tests/condition_variable_test.cpp:23 pop 9998
2024-03-07 02:07:41.353 INFO 486700 ZEDIO_WORKER_3 /root/zedio/tests/condition_variable_test.cpp:35 push 9999
condition_variable_test: /root/github/uchenily-zedio/zedio/sync/mutex.hpp:62: zedio::sync::Mutex::~Mutex(): Assertion `state_ == unlocking_state() || state_ == locking_state()' failed.
Aborted (core dumped)

make_format_args error: cannot bind non-const lvalue reference to an rvalue

/root/zedio/zedio/log/logger.hpp: In instantiation of ‘void zedio::log::detail::BaseLogger::format(const zedio::log::detail::FmtWithSourceLocation&, Args&& ...) [with zedio::log::detail::LogLevel LEVEL = zedio::log::detail::LogLevel::Error; Args = {std::basic_string_view<char, std::char_traits >}; DeriverLogger = zedio::log::detail::ConsoleLogger]’:
/root/zedio/zedio/log/logger.hpp:88:32: required from ‘void zedio::log::detail::BaseLogger::error(zedio::log::detail::FmtWithSourceLocation, Args&& ...) [with Args = {std::basic_string_view<char, std::char_traits >}; DeriverLogger = zedio::log::detail::ConsoleLogger]’
/root/zedio/tests/tcp_socket_test.cpp:37:5: required from here
/root/zedio/zedio/log/logger.hpp:125:62: error: cannot bind non-const lvalue reference of type ‘std::basic_string_view&’ to an rvalue of type ‘std::basic_string_view’
125 | std::vformat(fmt, std::make_format_args(std::forward(args)...))});
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/13.2.1/format:3411:28: note: initializing argument 1 of ‘auto std::make_format_args(_Args& ...) [with _Context = basic_format_context<__format::_Sink_iter, char>; _Args = {basic_string_view<char, char_traits >}]’
3411 | make_format_args(_Args&... __fmt_args) noexcept
| ~~~~~~^~~~~~~~~~~~~~
[22/46] Building CXX object tests/CMakeFiles/queue_test.dir/queue_test.cpp.o
ninja: build stopped: subcommand failed.
make: *** [Makefile:3: build] Error 1

g++ --version

g++ (GCC) 13.2.1 20240417

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.