{"id":16812147,"url":"https://github.com/romange/helio","last_synced_at":"2025-05-15T14:08:29.857Z","repository":{"id":38086640,"uuid":"288392503","full_name":"romange/helio","owner":"romange","description":"A modern framework for backend development based on io_uring Linux interface","archived":false,"fork":false,"pushed_at":"2025-05-07T10:41:42.000Z","size":2992,"stargazers_count":492,"open_issues_count":10,"forks_count":59,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-07T10:45:38.050Z","etag":null,"topics":["async","cpp17","fibers","hacktoberfest","io-uring"],"latest_commit_sha":null,"homepage":"https://romange.github.io/helio/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/romange.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-08-18T07:58:54.000Z","updated_at":"2025-05-06T07:43:13.000Z","dependencies_parsed_at":"2023-12-19T10:30:02.488Z","dependency_job_id":"26a2e4cb-031b-4349-88b8-f6dc293b75cd","html_url":"https://github.com/romange/helio","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romange%2Fhelio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romange%2Fhelio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romange%2Fhelio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romange%2Fhelio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/romange","download_url":"https://codeload.github.com/romange/helio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254355335,"owners_count":22057354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","cpp17","fibers","hacktoberfest","io-uring"],"created_at":"2024-10-13T10:20:51.220Z","updated_at":"2025-05-15T14:08:27.347Z","avatar_url":"https://github.com/romange.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Helio - backend development framework in C++ using io_uring and epoll event-loop.\n\n=====\n\n[![ci-tests](https://github.com/romange/async/actions/workflows/ci.yml/badge.svg)](https://github.com/romange/async/actions/workflows/ci.yml)\n\n[![codecov](https://codecov.io/gh/romange/helio/graph/badge.svg?token=2TIU52DK17)](https://codecov.io/gh/romange/helio)\n\nAsync is a set of C++ primitives that allows you efficient and rapid development\nin c++17 on Linux systems. The focus is mostly on backend development, data processing, etc.\n\n\n1. Dependency on [abseil-cpp](https://github.com/abseil/abseil-cpp/)\n2. Dependency on [Boost 1.71](https://www.boost.org/doc/libs/1_71_0/doc/html/)\n3. Uses ninja-build on top of cmake\n4. Built artifacts are docker-friendly.\n6. HTTP server implementation.\n7. Fibers library and fiber-friendly synchronization primitives.\n\n\nI will gradually add explanations for the most crucial blocks in this library.\n\n## Acknowledgments\nHelio has utilized [Boost.Fiber](https://github.com/boostorg/fiber) until May 2023.\nAfter this period, the fibers functionality\nwas integrated directly into Helio code. This transition involved adapting and reworking\nportions of the original Boost.Fiber code to align with Helio's coding conventions\nand architecture.\n\nThe design and implementation of Helio fibers draw significant inspiration from Boost.Fiber.\nCertain segments of the Boost.Fiber code were selectively adopted and modified for\nseamless incorporation into Helio. We extend our deepest gratitude and recognition to @olk\nand all the contributors of Boost.Fiber for their foundational work.\n\nThe decision to replicate and modify the original code was driven by the necessity\nfor greater flexibility. Specifically, it was easier to evolve Helio's polling mechanism\nwhen we had full control over the fibers internal interfaces.\n\n## Differrences between Boost.Fiber and helio fb2 fibers.\nHelio fb2 library adopts similar non-intrusive, shared nothing design similarly to Boost.Fiber.\nHowever, helio's fb2 library is more opinionated and also provides full networking support\nfor asynchronous multi-threaded execution. helio fibers allows injecting a custom dispatch\npolicy \"util::fb2::DispatchPolicy\" directly into a dispatching fiber,\nwhile Boost.Fiber requires using a separate fiber to handle the I/O polling.\nIn addition, Boost.Fiber inter-thread notification mechanism (aka remote ready queue)\nrequired locking while helio fibers use a lockless queue.\n\n## Setting Up \u0026 Building\n   ```bash\n   \u003e sudo ./install-dependencies.sh\n   \u003e ./blaze.sh -release\n   \u003e cd build-opt \u0026\u0026 ninja -j4 echo_server\n\n   ```\n   *third_party* folder is checked out under build directories.\n\n   Then, from 2 tabs run:\n\n   ```bash\n     server\u003e ./echo_server --logtostderr\n     client\u003e ./echo_server --connect=localhost --n 100000 --c=4\n   ```\n\n\n## HTTP\n\nHTTP handler is implemented using [Boost.Beast](https://www.boost.org/doc/libs/1_71_0/libs/beast/doc/html/index.html) library. It's integrated with the io_uring-based ProactorPool.\nPlease see [http_main.cc](https://github.com/romange/async/blob/master/util/http/http_main.cc), for example. HTTP also provides support for backend monitoring (Varz status page) and for an extensible debugging interface. With monitoring C++ backend returns JSON object that is formatted inside status page in the browser. To check how it looks, please go to [localhost:8080](http://localhost:8080) while `echo_server` is running.\n\n\n### Self-profiling\nEvery http-powered backend has integrated CPU profiling capabilities using [gperf-tools](https://github.com/gperftools/gperftools) and [pprof](https://github.com/google/pprof)\nProfiling can be triggered in prod using magic-url commands. Enabled profiling usually has a very minimal impact on CPU performance of the running backend.\n\n### Logging\nLogging is based on Google's [glog library](https://github.com/google/glog). The library is very reliable, performant, and solid. It has many features that allow resilient backend development.\nUnfortunately, Google's version has some bugs, which I fixed (waiting for review...), so I use my own fork. Glog library gives me the ability to control the logging levels of a backend at run-time without restarting it.\n\n## Tests\nASYNC uses a googletest+gmock unit-test environment.\n\n## Conventions\nThird_party packages have `TRDP::` prefix in `CMakeLists.txt`. absl libraries have prefix\n`absl::...`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromange%2Fhelio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromange%2Fhelio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromange%2Fhelio/lists"}