An open API service indexing awesome lists of open source software.

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

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`) |