Folly 是 Facebook 开源的高性能 C++ 基础设施库,专注解决大规模服务中的内存管理、异步 I/O 等痛点,依赖 C++17+、Linux 优先,需源码编译并链接多项系统依赖。

Folly 是 Facebook 开源的 C++ 库,专注高性能、生产级基础设施组件,不是通用算法库,而是为解决大规模服务中常见痛点(如内存管理、异步 I/O、线程安全、序列化)而生。它依赖较新 C++ 标准(推荐 C++17 或以上),不追求跨平台兼容性,对 Linux 环境支持最完善。
安装与编译准备
Folly 没有官方预编译包,需本地构建。主流方式是源码编译:
- 确保系统已安装依赖:g++-11+、CMake 3.16+、Boost、double-conversion、glog、gflags、lz4、zstd、snappy、libevent、openssl(Ubuntu/Debian 可用
apt-get install批量安装) - 克隆仓库:
git clone https://github.com/facebook/folly.git && cd folly - 建议使用
build/fbcode_builder/getdeps.py自动拉取和构建依赖(官方推荐流程);或手动用 CMake 配置:mkdir _build && cd _build && cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -
make -j$(nproc)编译,sudo make install安装(默认到/usr/local)
常用模块与快速上手示例
别一上来就啃整个库。从高频实用组件切入:
-
folly::StringPiece:轻量、非拥有式字符串视图,替代
const char*和std::string传参,避免拷贝。用法类似std::string_view(C++17),但兼容更早标准。 -
folly::fbstring:Facebook 优化的
std::string替代品,小字符串优化(SSO)更强,分配器更友好,尤其适合高频字符串拼接场景。 -
folly::EventBase:单线程事件循环核心,支撑异步 I/O(配合
AsyncSocket)、定时器、任务调度。是folly::IOThreadPoolExecutor和proxygen的基础。 -
folly::Synchronized:带细粒度锁封装的线程安全容器,语法简洁:
folly::Synchronized<:vector>> vec;,用vec.withLock([](auto& v) { v.push_back(42); })安全操作。
编译时加 -lfolly -lfollybenchmark(若用 benchmark),头文件路径通常为 /usr/local/include。
立即学习“C++免费学习笔记(深入)”;
集成进已有项目的小技巧
避免“全量引入”,按需链接:
- CMake 中用
find_package(folly REQUIRED)+target_link_libraries(your_target PRIVATE folly),比硬写路径更健壮 - 头文件只需包含具体用到的,例如:
#include、#include,不需这类旧路径 - 注意命名空间:所有 folly 符号都在
folly::下,无 using 声明更安全 - 调试时开启
-DFOLLY_HAVE_PTHREAD_SPINLOCK=ON(Linux)可提升某些锁性能,但非必需
避坑提醒
新手容易卡在这几个地方:
- 版本不匹配:Folly 主干(main)常要求最新 GCC/Clang,若用 Ubuntu 20.04 默认 g++-9,建议切到
v2023.07.31.00这类 LTS tag - 符号冲突:如果项目已用
glog或boost旧版,Folly 构建可能失败,统一升级或用getdeps.py隔离依赖 - 忘记链接依赖库:仅链
-lfolly不够,还需-lglog -lgflags -lssl -lcrypto -levent等,pkg-config --libs folly可查完整列表(安装后支持) - 误当 STL 替代:Folly 不提供
vector、map等基础容器的通用替代,它的容器(如fbvector)有特定优化目标,勿盲目替换











