Seastar 是专为高吞吐低延迟设计的 C++ 异步框架,采用 shared-nothing、每核单线程、future/promise 模型,配合无锁内存与零拷贝 I/O;核心组件包括 future、smp、engine 和 memory,需用 app_template 启动多核实例,禁用阻塞调用,全程异步链式编程。

Seastar 是一个为极致性能设计的 C++ 异步编程框架,专为高吞吐、低延迟、高并发场景优化(比如数据库、存储引擎、网络代理)。它不基于线程池或回调地狱,而是采用 共享- nothing + 单线程 per core + future/promise 模型,配合无锁内存管理和零拷贝 I/O,把现代多核服务器的硬件能力压到极致。
核心用法:从 main 到 reactor 循环
Seastar 程序没有传统 “多线程 main”,而是启动一个 app_template,它自动为每个 CPU 核心绑定一个独占的 event loop(即 reactor)。你的逻辑运行在单线程上下文中,避免锁和上下文切换开销。
- 用
app_template封装主逻辑,调用run()启动多核实例 - 所有异步操作返回
future,用.then()、.finally()、.handle_exception()链式组合 - 禁止阻塞调用(如
std::cin、sleep()、普通文件 read/write),必须用 Seastar 提供的异步版(engine().sleep()、file::open()等)
关键组件:future、smp、engine 和 memory
理解这四个概念是用好 Seastar 的基础:
-
future/promise:异步值的载体,支持 move-only、无虚函数、栈友好;
futuref = make_ready_future (42); -
smp:负责跨核通信,
smp::submit_to(1, [] { return do_something(); })把任务提交到指定 shard(core) -
engine():当前 shard 的 reactor 实例,提供定时器、网络、I/O、调度等接口,比如
engine().at_exit(...) -
memory:默认使用 huge page + 内存池(如
simple_memory_resource),分配不走malloc,避免锁和碎片
写一个 HTTP 回显服务(极简示例)
这是 Seastar 最典型的入门模式:监听端口 → 接收连接 → 读请求 → 写响应。
立即学习“C++免费学习笔记(深入)”;
int main(int argc, char** argv) {
app_template app;
app.run(argc, argv, [] {
return seastar::async([] {
// 监听 8080
auto server = engine().listen(make_ipv4_address({8080}));
// 处理每个连接
(void)server->accept().then([] (connected_socket fd, socket_address addr) {
auto conn = std::make_unique(std::move(fd));
(void)conn->process();
});
});
});
} 注意:connection::process() 要自己实现读头、解析、构造响应、写回,并全程用 input_stream/output_stream + future 链式推进,不能出现同步等待。
编译与运行:必须用特定工具链
Seastar 对编译器、链接器、CPU 特性有强依赖:
- 要求 GCC ≥ 11 或 Clang ≥ 14,启用
-std=c++20 - 必须用 Seastar 自带的
configure.py生成 Makefile(支持 DPDK、Xen、hwloc 等可选模块) - 运行时建议绑核:
taskset -c 0-3 ./my_app --smp 4,避免 OS 调度干扰 - 调试可用
--no-huge-pages关闭 hugepage,但性能会明显下降
基本上就这些。Seastar 不是“换个库就能提速”的甜点框架,它需要你重写思维——放弃全局状态、拥抱 shard 局部性、用 future 替代 callback、用 smp::submit_to 显式跨核。一旦适应,C++ 在云原生后端的性能天花板会被真正打开。











