Facebook Folly:3 万 Star 的 C++ 高性能基础库 文章目录Facebook Folly3 万 Star 的 C 高性能基础库它解决什么问题核心特点怎么用适合谁Facebook Folly3 万 Star 的 C 高性能基础库Facebook 内部用了十多年的 C 组件库终于把代码全放出来了。Folly 在 GitHub 上拿了 3 万多 Star覆盖了 Facebook 几乎所有的 C 开源项目。说白了这是一个补位型的库。C 标准库和 Boost 覆盖不到的地方或者性能不够好的场景Folly 来填。Boost 的很多设计偏通用和安全Folly 的取向恰好相反优先保证大规模生产环境下的吞吐和延迟。它解决什么问题C 开发者都清楚标准库虽然稳定但很多组件的设计偏保守性能在大规模场景下不够用。Boost 功能全面但体积大、编译慢有些模块的性能也不理想。Folly 的定位就是在标准库和 Boost 都不够好的地方提供高性能的替代方案。Facebook 内部的其他 C 开源项目比如 mvfst、Proxygen、Wangle底层都依赖它。项目的设计原则很明确只在两种情况下造轮子一是标准库或 Boost 没有对应功能二是现有实现的性能达不到要求。如果 std 或 Boost 后来补上了Folly 会把对应的组件移除。核心特点性能是贯穿整个项目的第一优先级。为了跑得更快有些接口的设计会牺牲一些通用性。比如 PackedSyncPtr 和 SmallLocks 这些组件设计上偏向极端场景的吞吐量。库的结构比较扁平所有符号都在 folly 命名空间下没有复杂的目录层级。组件之间没有依赖限制任何一个模块可以调用其他模块。支持的平台覆盖也全Linuxx86-32、x86-64、ARM、macOS、Windows、iOS 都能跑。编译器方面 gcc 5.1 以上、clang、MSVC 都支持。从平台覆盖面来看Meta 对这个库的定位是跨端通用的基础设施。整个库的历史可以追溯到 Facebook 早期经过多年内部打磨里面的组件都经过了十亿级请求量的验证。这也是它和一般开源 C 库最大的区别很多设计决策是在极端规模下被迫做出的不是纸上谈兵。怎么用官方推荐用 getdeps.py 脚本来构建。这个脚本会自动下载和编译所有依赖然后调用 cmake 完成构建。需要 Python 3.6 以上环境。git clone https://github.com/facebook/folly cd folly python3 ./build/fbcode_builder/getdeps.py --allow-system-packages build输出的静态库在installed/folly/lib/libfolly.a。因为 Folly 不保证不同版本之间的 ABI 兼容性建议编译成静态库使用。不想用 getdeps.py 的话也可以直接用 cmake 构建。macOS 上能通过 Homebrew 安装brew install folly。Windows 用户可以走 Vcpkgvcpkg install folly:x64-windows。适合谁如果你在做 C 后端服务特别是高性能网络、并发编程相关的开发Folly 值得看看。它在这些场景下积累了大量实战经验。即使不直接使用翻翻源码也能学到不少大规模 C 项目的工程实践。如果只是写些简单的 C 程序标准库和 Boost 够用的话没必要引入 Folly。它的依赖链不算短构建也有些门槛价值主要体现在大规模、高并发的生产环境里。引入 Folly。它的依赖链不算短构建也有些门槛价值主要体现在大规模、高并发的生产环境里。