logo
ZioArchitecture

架构

zio的核心设计理念:

  • 分层解耦架构:底层无锁原语、中层事件循环、上层任务系统

  • 零成本抽象:编译时多态、内联优化、最小化运行时开销

  • 取消安全:完善的任务取消机制和资源清理保证

  • 跨平台一致性:统一的API抽象不同操作系统的异步I/O能力

其核心层次结构为

模块模块路径职责
主入口zio.zig导出公共API,组织模块依赖,提供用户友好的统一接口
运行时runtime.zigExecutor管理、线程池协调、任务调度、生命周期控制
任务系统task.zig协程任务定义、Closure抽象、状态机、取消机制
阻塞任务blocking_task.zig线程池执行的阻塞操作封装,不阻塞协调调度
任务组group.zig结构化并发、任务生命周期管理、错误传播
可等待对象awaitable.zig统一的任务/Future抽象基类,支持多态等待
通用定义common.zigWaiter、错误类型、I/O等待原语、平台无关工具
协程库coro/栈式协程、上下文切换、栈池管理、平台适配
事件循环ev/I/O多路复用、定时器、线程池、后端抽象
OS抽象os/跨平台系统调用封装、平台差异处理
同步原语sync/Mutex、Channel、Semaphore等协程友好同步原语

源码目录结构

src/
├── zio.zig              # 公共 API 入口
├── runtime.zig          # 运行时编排器
├── task.zig             # 协程任务系统
├── blocking_task.zig    # 阻塞任务封装
├── group.zig            # 任务组(结构化并发)
├── awaitable.zig        # 可等待对象抽象
├── common.zig           # 通用定义和工具
├── time.zig             # 时间类型
├── signal.zig           # 信号处理
├── net.zig              # 网络 API
├── fs.zig               # 文件系统 API
├── dns/                 # DNS 解析模块
│   ├── root.zig
│   ├── posix.zig
│   ├── windows.zig
│   └── darwin.zig
├── coro/                # 协程核心
│   ├── root.zig
│   ├── coroutines.zig   # 协程 API
│   ├── stack.zig        # 栈管理
│   └── stack_pool.zig   # 栈池
├── ev/                  # 事件循环
│   ├── root.zig
│   ├── loop.zig         # 主循环
│   ├── completion.zig   # 完成对象
│   ├── buf.zig          # 缓冲区抽象
│   └── backends/        # 平台后端
│       ├── io_uring.zig # Linux io_uring
│       ├── epoll.zig    # Linux epoll
│       ├── kqueue.zig   # BSD/macOS kqueue
│       └── iocp.zig     # Windows IOCP
├── os/                  # OS 抽象层
│   ├── root.zig
│   ├── net.zig          # 网络 OS 调用
│   ├── fs.zig           # 文件系统 OS 调用
│   └── time.zig         # 时间 OS 调用
├── sync/                # 同步原语
│   ├── Mutex.zig
│   ├── Condition.zig
│   ├── Semaphore.zig
│   ├── RwLock.zig
│   ├── Barrier.zig
│   ├── Notify.zig
│   ├── Futex.zig
│   ├── channel.zig
│   ├── broadcast_channel.zig
│   └── future.zig
└── utils/               # 工具模块
    ├── wait_queue.zig
    ├── work_stealing_queue.zig
    ├── memory_pool.zig
    └── ref_counter.zig

数据流关系

用户代码


spawn(func, args)          ← 创建任务


Runtime.getNextExecutor()  ← 选择执行器


AnyTask.create()           ← 分配协程栈


Executor.scheduleTask()    ← 调度到就绪队列


Coroutine.step()           ← 执行协程

    ├── yield()            ← 让出 CPU
    │       │
    │       ▼
Executor.run()     ← 运行事件循环
    │       │
    │       ▼
Backend.poll()     ← 等待 I/O

    └── 完成/取消任务结束


        Awaitable.release() ← 释放资源