Folly是Facebook开源的C++高性能服务底层工具集,专注高吞吐、低延迟场景,核心特性包括零拷贝(IOBuf)、无锁并发(AtomicHashMap)、高性能字符串(fbstring)及线程安全封装(Synchronized)。

Facebook 开源的 Folly 库是 C++ 高性能服务开发中非常实用的底层工具集,它不是通用 STL 替代品,而是为解决真实大规模服务场景中的性能、并发、内存、序列化等痛点而生。入门关键不在于学全所有模块,而在于理解其设计哲学——零拷贝、无锁优先、类型安全、面向现代 C++(C++14/17+),并快速上手几个高频核心组件。
Folly 是 Facebook 内部长期打磨的 C++ 基础库,和 Boost、abseil 类似,但更侧重“高吞吐、低延迟、可扩展”的服务端需求。它不追求跨平台兼容性(Linux 为主)、不强调向后兼容(API 可能小版本变动),换来的是一些激进优化:比如 fbstring 的 SSO + 内存池混合策略、folly::AtomicHashMap 的分段无锁哈希、folly::IOBuf 的链式零拷贝缓冲区。
适合用在:
• 高频网络服务(如代理、RPC 框架)
• 实时日志/指标聚合系统
• 内存敏感型中间件(缓存 client、消息队列封装)
• 需要精细控制对象生命周期或内存布局的模块
Folly 依赖较多(gflags、glog、double-conversion、libevent、zlib、lz4 等),推荐用包管理器或预编译方式避免踩坑:
apt install libfolly-dev(官方源或 fb-repo)最省事./build/fbcode_builder/getdeps.py --allow-system-packages build --make-install
target_link_libraries(your_target PRIVATE folly),头文件自动可见(安装后 include 路径已注册)-std=c++17
1. folly::IOBuf —— 零拷贝 I/O 缓冲区
替代 std::string 或裸 char* 处理网络包、协议解析。支持链式拼接、切片共享、自动内存管理(引用计数 + 内存池)。
示例:接收一个 TCP 包后拆出 header 和 payload,无需 memcpy
立即学习“C++免费学习笔记(深入)”;
auto buf = folly::IOBuf::create(1024); // ... fill data auto header = buf->cloneOne(); header->trimEnd(buf->length() - 12); // 取前 12 字节 auto payload = buf->cloneOne(); payload->trimStart(12); // 剩余部分
2. folly::fbstring —— 高性能字符串
默认启用 small string optimization(SSO),短字符串(≤23 字节)完全栈上存储;长字符串使用 jemalloc 优化分配。接口与 std::string 几乎一致,可直接替换。
建议:在高频日志拼接、HTTP header 构造、Key 生成等场景,把 std::string 换成 folly::fbstring,常有 10%~30% 性能提升。
3. folly::Synchronized<t></t> —— 简洁线程安全封装
比裸 std::mutex + T 更安全易用。自动 RAII 加锁,支持读写锁、升级锁,避免忘记 unlock 或死锁。
folly::Synchronized<std::unordered_map<int, std::string>> cache;
// 读操作(共享锁)
cache.withRLock([](auto& m) { return m.find(42) != m.end(); });
// 写操作(独占锁)
cache.withWLock([](auto& m) { m[42] = "hello"; });4. folly::Function / folly::move_only_function —— 零开销泛函容器
比 std::function 更轻量(无异常、无分配、支持 move-only callable),适合回调、异步任务封装、事件驱动模型。
folly::move_only_function<void(int)> cb = [obj = std::make_unique<Foo>()](int x) {
obj->process(x);
};• 不要全局用 Folly 替换标准库:比如 std::vector、std::shared_ptr 没必要换,Folly 并未提供全面替代
• folly::Optional 已废弃,统一用 std::optional(C++17)
• 日志用 folly::Logger + folly::AsyncFileWriter,比 glog 更低延迟,但需配好 backend
• 所有 Folly 类型默认不支持 exception safety 的强保证,若需严格异常安全,查文档确认具体类行为
• 调试时记得开启 -DFOLLY_HAVE_LIBDWARF 支持更好的 stack trace
基本上就这些。Folly 不是银弹,但当你卡在 memcpy 瓶颈、锁竞争、字符串分配抖动上时,它往往就是那个“刚好够用又足够快”的答案。
以上就是c++++ Folly库入门与使用_c++ Facebook开源库核心组件【高性能】的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号