概览
按包引入,只编译用到的模块;与 Zhenyi 主项目解耦,也可单独用在工具、网关、中间件里做性能敏感路径。若要系统读框架与 Actor,可配合主仓库里的《Go Actor 模型与实时应用》开源书稿。
MIT zhenyi-base 能做什么
无锁队列、对象池、网络核心、日志与序列化等高性能构件,零业务假设。可单独用于任意 Go 项目,也是搭建 Zhenyi 完整后台时的底层依赖。
快速上手 · 先试试基础库
下面几段代码都来自 zhenyi-base,粘进 main.go 后执行 go run . 即可跑通。若要跑完整的 Zhenyi 示例,请看仓库里的 examples。
zserver
3 步启动,收到什么回什么。另开终端运行 go run ./examples/echodemo/client/main.go 即可验证
package main
import (
"fmt"
"github.com/aiyang-zh/zhenyi-base/zserver"
)
func main() {
s := zserver.New(zserver.WithAddr(":9001"))
s.Handle(1, func(req *zserver.Request) {
fmt.Printf("收到: %s\n", string(req.Data()))
req.Reply(1, req.Data())
})
s.Run()
}
zqueue · 零依赖
MPSC 多生产者单消费者队列,不拉入任何第三方依赖
package main
import "github.com/aiyang-zh/zhenyi-base/zqueue"
func main() {
q := zqueue.NewMPSCQueue[int](1024)
q.Enqueue(42)
q.Enqueue(100)
val, ok := q.Dequeue() // 42, true
val2, _ := q.Dequeue() // 100, true
}
zpool · 零依赖
按类型池化对象,减少 GC,支持任意 T
package main
import "github.com/aiyang-zh/zhenyi-base/zpool"
type MyObject struct{ Data []byte }
func main() {
pool := zpool.NewPool(func() *MyObject {
return &MyObject{Data: make([]byte, 0, 1024)}
})
obj := pool.Get()
defer pool.Put(obj)
obj.Data = append(obj.Data, 'H', 'i')
}
性能一览 · 基础库压测
图表来自 zhenyi-base 压测数据;Zhenyi 主项目在性能与工程取向上与之对齐(细项以各模块基准与文档为准)。测试环境:darwin/arm64 · Apple M3 · Go 1.24+
Network Echo 压测 (msg/s)
核心组件基准 (ns/op,越低越好)
zqueue vs Channel:生产者数量对延迟的影响 (Medium 4096B, Batch)
数据与 zqueue-deep-dive 一致。复现:go test -bench=BenchmarkMatrix -benchmem ./zqueue/
底层性能数据来自 zhenyi-base:核心指标 · zqueue 96 组基准原始数据