https://github.com/eldment/cpp-coroutine
⚡️ A lightweight C++17 coroutine library for Windows
https://github.com/eldment/cpp-coroutine
async concurrency concurrent-programming coroutines cpp17 cxx17 modern-cpp
Last synced: 11 months ago
JSON representation
⚡️ A lightweight C++17 coroutine library for Windows
- Host: GitHub
- URL: https://github.com/eldment/cpp-coroutine
- Owner: ELDment
- License: gpl-3.0
- Created: 2025-07-12T16:08:26.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-07-12T16:30:03.000Z (11 months ago)
- Last Synced: 2025-07-12T18:37:46.140Z (11 months ago)
- Topics: async, concurrency, concurrent-programming, coroutines, cpp17, cxx17, modern-cpp
- Language: C++
- Homepage: https://github.com/ELDment/cpp-coroutine
- Size: 21.5 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 💻 Cpp-Coroutine
基于 **Windows Fiber**、**向量化异常处理 (VEH)** 及 **CXX17** 实现的 C++ 协程库
> ⚠️ 本项目是一个**练手项目**,旨在研究协程底层的调度、上下文切换和异常处理机制。由于核心实现依赖了 Windows Fiber,本项目**仅支持 Windows 平台**。同时,本项目不会提供生产级的性能优化或长期的社区支持。
## ✨ 核心功能
- ⚙️ **协程调度接口**: 提供协程的创建、执行、挂起和恢复等基本调度功能
- 🤝 **协作式调度器**: 内置调度器统一管理所有协程,实现了协作式多任务处理
- 😴 **智能调度休眠**: 当没有可运行的协程时,调度器将智能休眠以降低 CPU 占用,直到下一个任务唤醒
- 🎁 **Future/Promise**: 通过 `CoroutinePromise` 对象,可以从协程外部安全地获取执行结果或捕获异常
## 🔧 实现原理
- **上下文切换**: 基于 Windows `Fiber` API,实现用户态的轻量级上下文切换,避免了内核态转换的开销
- **异常捕获**: 通过向量化异常处理 (`VEH`) 捕获协程中的 C++ 及结构化异常,并将其转化为数据传递给 `Promise`,防止程序崩溃
- **调度模型**: 采用单线程事件循环,通过 `std::deque` 管理可运行的协程 (FIFO),并用优先队列处理异步睡眠任务
## 🛠️ 快速开始
使用 xmake 进行构建并运行基准测试
```powershell
# 构建项目
xmake
# 运行基准测试
xmake run benchmark
```
## 🗺️ 未来计划
### 🚀 Cpp-Coroutine 未来开发计划
| 优先级 | 分类 | 主要任务 |
| :---: | :--- | :--- |
| ⚡ | **C++20 协程支持** | - [ ] 设计 `Task`
- [ ] 封装 Awaitables |
| ⚡⚡⚡⚡ | **调度器与并发** | - [ ] 多线程调度器
- [ ] 集成 IOCP |
| ⚡⚡ | **协程同步原语** | - [ ] 异步互斥锁(`AsyncMutex`)
- [ ] 异步信号量(`AsyncSemaphore`)
- [ ] 组合器(`WhenAll` / `WhenAny`) |
| ⚡⚡⚡ | **API** | - [ ] 协作式取消(`CancellationToken`) |