Skip to content

Releases: funnywwh/zco

0.5.0

30 Oct 12:11

Choose a tag to compare

Highlights
HTTP 示例默认并发参数调优:worker_pool_size=512, channel_buffer=8192, max_connections=10000
默认启用 Streaming Parser,提升高并发与大报文稳定性
新增脚本 scripts/http_bench.sh:一键 start/stop/ab/wrk
Benchmarks (local, c=400)
ab -k: RPS≈10207, P99≈46ms, Failed=0
ab : RPS≈10144, P99≈47ms, Failed=0
wrk 30s: RPS≈9935, Avg≈39.8ms
Notes
建议 ulimit -n 1048576, sysctl net.core.somaxconn=65535
详细输出见 benchmarks/results/ 与 README.md

0.4.2

29 Oct 09:55

Choose a tag to compare

  • 实现完整的RFC 6455 WebSocket标准协议
  • 支持握手、文本/二进制消息、ping/pong、分片消息
  • 动态内存管理,支持大消息分片处理
  • UTF-8验证和协议合规性检查
  • 提供完整的Node.js测试套件,所有测试通过"

0.4.1 环形缓冲区+优先级位图调度器

28 Oct 12:28

Choose a tag to compare

ZCO v0.4.1 Release

🎉 主要更新

本版本实现了环形缓冲区+优先级位图调度器,这是调度器架构的重大升级!

✨ 新特性

1. 环形缓冲区+优先级位图调度器

  • O(1) 优先级查找: 使用32位位图实现常数时间查找最高优先级协程
  • 多优先级支持: 支持0-31共32个优先级级别的独立队列
  • O(1) 入队/出队: 每个优先级使用独立的环形缓冲区
  • 内存优化: 环形缓冲区避免频繁内存分配,提高性能

2. 可配置参数

  • RING_BUFFER_SIZE = 2048 - 每个优先级的环形缓冲区大小(可配置)
  • MAX_PRIORITY_LEVELS = 32 - 支持的优先级级别数量

3. 新增 API

// 带优先级的协程创建
pub fn goWithPriority(
    self: *Schedule, 
    comptime func: anytype, 
    args: anytype, 
    priority: usize
) !*Co

// 队列统计信息
pub fn count(self: *const RingBufferPriorityQueue) usize
pub fn isEmpty(self: *const RingBufferPriorityQueue) bool
pub fn getPriorityCount(self: *const RingBufferPriorityQueue, priority: usize) usize
pub fn getHighestPriority(self: *const RingBufferPriorityQueue) ?usize

🚀 性能提升

时间复杂度

  • 查找最高优先级: O(log n) → O(1)
  • 入队操作: O(1) (保持不变)
  • 出队操作: O(1) (保持不变)

内存占用

  • 增加: 约256KB (32 × 2048 × 4字节指针)
  • 优势: 支持32个优先级级别的独立队列,避免动态分配

🔧 技术亮点

优先级位图操作

// 设置优先级位
self.priority_bitmap |= (@as(u32, 1) << @intCast(priority));

// 查找最高优先级 (O(1))
const highest_priority = 31 - @clz(self.priority_bitmap);

// 清除优先级位
self.priority_bitmap &= ~(@as(u32, 1) << @intCast(priority));

环形缓冲区设计

const RingBufferPriorityQueue = struct {
    rings: [MAX_PRIORITY_LEVELS]RingBuffer,  // 32个优先级的环形缓冲区
    priority_bitmap: u32,                     // 32位优先级位图
    allocator: std.mem.Allocator,
};

📖 使用示例

创建不同优先级的协程

// 高优先级协程
_ = try schedule.goWithPriority(highPriorityTask, .{}, 15);

// 中等优先级协程
_ = try schedule.goWithPriority(mediumPriorityTask, .{}, 5);

// 低优先级协程
_ = try schedule.goWithPriority(lowPriorityTask, .{}, 0);

查询队列状态

// 获取总协程数
const total_count = schedule.readyQueue.count();

// 获取最高优先级
if (schedule.readyQueue.getHighestPriority()) |highest| {
    std.log.info("当前最高优先级: {d}", .{highest});
}

// 获取指定优先级的协程数
const count = schedule.readyQueue.getPriorityCount(10);

🧪 测试验证

  • ✅ 基本调度功能正常
  • ✅ 时间片抢占工作正常
  • ✅ 协程交替执行正常
  • ✅ 多优先级调度顺序正确
  • ✅ 环形缓冲区循环使用正常
  • ✅ 位图正确更新

📚 文档

  • 技术文档: docs/RING_BUFFER_PRIORITY_REPORT.md
  • 完整文档: docs/ 目录包含14个文档文件
  • 优化指南: docs/PERFORMANCE_OPTIMIZATION_GUIDE.md

🔗 相关链接

🎯 向后兼容性

  • ✅ 完全向后兼容现有API
  • ✅ 默认优先级为0
  • ✅ 现有代码无需修改即可使用

🙏 致谢

感谢所有贡献者和用户的支持!

ZCO 0.4.0 - 性能优化版本发布

28 Oct 11:51

Choose a tag to compare

ZCO 0.4.0 - 性能优化版本发布

重大性能更新:在调度器效率、内存管理和HTTP处理方面实现了显著改进。

⚡ 主要改进

• 低并发场景性能提升50%(超越Go 14.5%)
• 调度器效率从 O(log n) 优化到 O(1)
• 内存使用减少50%(栈大小:8KB → 4KB)
• 三级池化架构实现高效资源管理

📊 性能基准测试

测试场景 ZCO RPS 与Go对比
1000请求, 10并发 44,308 相比Go提升14.5%
1万请求, 100并发 44,944 性能相当
5万请求, 500并发 43,646 性能相当
10万请求, 1000并发 36,938 性能相当

🔧 主要特性

调度器优化
• 基于ArrayList的调度(O(1)插入)
• 动态批处理(每批次16-128个协程)
• 优化的信号处理,减少系统调用
• 栈大小优化(8KB → 4KB)

内存管理
• 内存池(1000个1KB内存块,快速分配)
• 协程池(500个协程对象复用)
• 连接池(200个TCP连接复用)
• 内存对齐优化,提升缓存性能

网络优化
• TCP_NODELAY 降低延迟
• 连接池实现高效的TCP连接复用
• 优化的io_uring配置

HTTP性能
• SIMD加速字符串匹配(16字节向量化)
• 预编译HTTP响应
• 1000条目响应缓存
• 零拷贝缓冲区机制
• 直接字节比较替代indexOf

系统优化
• 关键路径的分支预测提示
• CPU亲和性接口(简化版)
• NUMA优化接口(简化版)

🎯 对您意味着什么

如果您使用ZCO进行:
• 高吞吐量应用:将看到显著的RPS改进
• 低延迟要求:网络优化减少响应时间
• 内存受限环境:内存占用减少50%
• 并发工作负载:负载下更好的调度器性能

📦 安装

zig build

或者使用标签:

git checkout 0.4.0
zig build

🔄 升级说明

无破坏性更改。这是一个专注于性能的发布,保持了完整的API兼容性。现有应用将无需任何代码更改即可自动获得性能改进。

📝 完整优化列表(18/20项已完成)

✅ ArrayList替代PriorityQueue
✅ 动态批处理
✅ 批量信号屏蔽
✅ 内存池实现
✅ 协程池实现
✅ 栈大小减少
✅ 内存对齐
✅ TCP_NODELAY
✅ 连接池
✅ 直接字节比较
✅ 预编译响应
✅ HTTP响应缓存
✅ 零拷贝缓冲区
✅ SIMD字符串匹配
✅ 分支预测
✅ CPU亲和性接口
✅ NUMA优化接口
✅ 性能监控

🐛 已知问题

• 在极端高并发场景(1000+并发)下性能略低于Go
• NUMA和CPU亲和性优化为简化版本

🔮 下一步计划

• 完整的NUMA支持
• 真正的CPU亲和性绑定
• 更智能的自适应调度算法
• 分布式协程调度

更多详细信息,请查看仓库中的 CHANGELOG_V0.4.0.md。

v0.3.2: 优化协程抢占信号处理机制

27 Oct 12:40

Choose a tag to compare

这是一个针对 v0.3.1 的 bugfix 版本,主要优化了协程抢占信号处理机制。

核心改进:

  1. 修复信号屏蔽恢复时机,避免竞态
  2. 简化抢占处理实现,用现有 API 替代手动上下文切换
  3. 同步优化测试代码与调试配置

技术亮点:

  • 代码量减少约 88 行
  • 提高抢占机制稳定性
  • 保持与 v0.3.1 的性能表现

ZCO v0.3.1 - 协程级定时器生命周期管理

25 Oct 01:27

Choose a tag to compare

🚀 ZCO v0.3.1 - 协程级定时器生命周期管理

📋 版本概述

ZCO v0.3.1 引入了革命性的协程级定时器生命周期管理,实现了定时器与协程运行状态的完全绑定。这一重大更新不仅提供了更精确的协程调度控制,还带来了显著的性能提升。

✨ 主要新特性

🎯 协程级定时器生命周期管理

  • 细粒度控制: 定时器生命周期与协程运行状态完全绑定
  • 智能启动: 协程运行时自动启动定时器并重置计时(从0开始)
  • 即时停止: 协程挂起时立即停止定时器,避免无效中断
  • 资源优化: 空闲时不运行定时器,显著节省CPU资源

⚡ 性能大幅提升

  • 低并发场景: RPS 提升 41% (25,970 → 36,593)
  • 高并发场景: RPS 提升 16% (24,596 → 28,462)
  • 响应时间: 全面改善 14-29%
  • 资源效率: 空闲时CPU使用率显著降低

🔧 技术改进

架构优化

  • 移除了 timer_started 全局状态标志
  • 实现了协程级别的定时器状态管理
  • 优化了信号处理开销和CPU缓存局部性

调度器增强

  • 每个协程获得完整时间片(从0开始计时)
  • 避免了时间片碎片化问题
  • 提高了协程切换的公平性

📊 性能基准测试

测试场景 版本 RPS 平均响应时间 性能提升
10,000/100 v0.2.2 25,970 3.851ms -
10,000/100 v0.3.1 36,593 2.733ms +41%
50,000/500 v0.2.2 24,596 20.329ms -
50,000/500 v0.3.1 28,462 17.567ms +16%

🛠️ API 变更

新增方法

// 停止定时器
pub fn stopTimer(self: *Schedule) void

行为变更

  • startTimer() 现在每次调用都会重置定时器
  • 协程 Resume() 时自动启动定时器
  • 协程 Suspend() 时自动停止定时器
  • 协程结束时自动停止定时器

📝 使用示例

// 协程级定时器生命周期示例
const s = try zco.getSchedule();

_ = try s.go(struct {
    fn run() !void {
        const co = try zco.getSchedule().getCurrentCo();
        
        // 协程运行时,定时器自动启动并重置
        std.log.info("协程开始运行,定时器已启动");
        
        // 长时间计算...
        for (0..1000000) |i| {
            _ = i * 2;
        }
        
        // 主动挂起时,定时器自动停止
        try co.Suspend();
        std.log.info("协程挂起,定时器已停止");
        
        // 恢复时,定时器重新启动并重置
        try co.Resume();
        std.log.info("协程恢复,定时器重新启动");
    }
}.run, .{});

🔄 迁移指南

从 v0.2.2 升级

  1. 无需代码修改: 所有现有代码完全兼容
  2. 自动优化: 定时器管理自动优化,无需手动干预
  3. 性能提升: 升级后自动获得性能提升

注意事项

  • 定时器现在完全由协程生命周期管理
  • 不再需要手动管理 timer_started 状态
  • 协程挂起时定时器会自动停止

🐛 修复和改进

  • 修复了定时器在协程切换时的状态不一致问题
  • 优化了高并发场景下的协程调度性能
  • 改进了空闲状态下的资源使用效率
  • 增强了协程调度的公平性

📚 文档更新

  • 更新了 README.md 突出显示新特性
  • 添加了详细的 CHANGELOG.md
  • 完善了 API 文档和使用示例

🎯 适用场景

  • 高并发网络服务器: 显著提升HTTP服务器性能
  • 实时系统: 精确的协程调度控制
  • 资源敏感应用: 空闲时自动节省CPU资源
  • 协程密集型应用: 更好的调度公平性

🔗 相关链接

🙏 致谢

感谢所有贡献者和用户的支持,让 ZCO 能够持续改进和优化!


下载: ZCO v0.3.1
完整变更日志: CHANGELOG.md

0.3.0

24 Oct 13:04

Choose a tag to compare

主要特性:

  • 实现完整的时间片抢占调度机制 (10ms)
  • 添加与 Go 的完整性能对比测试
  • 优化协程调度器性能和稳定性
  • 清理临时文件和代码
  • 更新文档和 README

性能测试结果:

  • ZCO: 24,811-25,965 RPS, 0.403-38.514ms 响应时间
  • Go: 35,782-53,662 RPS, 0.218-27.947ms 响应时间
  • 所有测试场景零失败率

0.2.3

24 Oct 02:25

Choose a tag to compare

基于从 v0.2.2 到现在的所有修改,我为您生成以下版本发布描述:


ZCO v0.2.3 发布说明

🚀 重大性能优化

核心性能提升

  • 批量协程调度: 实现每次处理32个协程的批量调度机制,大幅提升调度效率
  • 内存优化: 协程栈大小从32KB优化到8KB,节省75%内存使用
  • 预编译HTTP响应: 避免运行时字符串操作,提升响应速度
  • 连接数限制: 最大支持10,000个并发连接,防止内存爆炸

性能基准测试结果

  • QPS性能:
    • 100并发: 41,253 请求/秒
    • 1000并发: 39,915 请求/秒
  • 延迟表现:
    • 低并发平均延迟: 2.4ms
    • 高并发平均延迟: 25ms
  • 稳定性: 0% 失败率,无内存泄漏

🔧 重要修复

协程和通道优化

  • 修复通道 deinit 断言问题,提高协程退出稳定性
  • 修复 Chan.deinit 内存泄漏问题
  • 实现 Schedule.stop 优雅退出机制,通过唤醒协程并返回错误实现
  • 优化协程参数传递机制

网络和IO改进

  • Tcp.init 现在返回指针,提高使用便利性
  • 修复IO关闭后 xobj = null 的资源清理问题
  • 添加 WaitGroup 支持,增强并发控制能力

兼容性修复

  • 修复 Zig 0.14.0-dev.3237+ 构建错误
  • 更新版本要求到 Zig 0.14.0
  • 修复所有模块的 xev 冲突问题
  • 修复 build.zig.zon 语法兼容性问题

📚 文档和工具完善

新增文档

  • 创建 docs/ 目录统一管理文档
  • 添加性能对比报告 (ZCO vs Go)
  • 提供详细的性能优化指南
  • 包含优化总结和使用示例

测试工具

  • 新增 ZCO 性能测试脚本
  • 提供 ZCO vs Go 对比测试脚本
  • 包含性能优化示例代码
  • 提供优化服务器示例

🎯 技术亮点

  • 高性能: 在保持低延迟的同时实现高QPS
  • 内存高效: 75%的内存使用优化
  • 稳定可靠: 0%失败率,无内存泄漏
  • 易于使用: 完善的文档和示例代码
  • 现代兼容: 支持 Zig 0.14.0 最新特性

📦 升级建议

从 v0.2.2 升级到 v0.2.3 建议:

  1. 确保使用 Zig 0.14.0 或更高版本
  2. 重新编译所有依赖项目
  3. 查看新的性能优化指南以充分利用新特性
  4. 使用新的测试脚本验证性能提升

版本: v0.2.3
发布日期: 2025年10月23日
Zig版本要求: 0.14.0+
主要贡献者: winger

0.2.2

13 Feb 11:20

Choose a tag to compare

1.移除zigcoro,不稳定,在contextEntry中catch不了
2.修复退出是会导致的go参数内存泄露

0.2.1

03 Feb 11:01

Choose a tag to compare

0.2.1 Pre-release
Pre-release

实现:优先级调度器,通道,File,Tcp