0

0

c++ Folly库怎么用 c++ Facebook开源库入门【指南】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-09 14:18:31

|

451人浏览过

|

来源于php中文网

原创

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

c++ folly库怎么用 c++ facebook开源库入门【指南】

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::IOThreadPoolExecutorproxygen 的基础。
  • folly::Synchronized:带细粒度锁封装的线程安全容器,语法简洁:folly::Synchronized<:vector>> vec;,用 vec.withLock([](auto& v) { v.push_back(42); }) 安全操作。

编译时加 -lfolly -lfollybenchmark(若用 benchmark),头文件路径通常为 /usr/local/include

CreBee
CreBee

短视频矩阵运营工具,跨平台多账号一站式管理

下载

立即学习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
  • 符号冲突:如果项目已用 glogboost 旧版,Folly 构建可能失败,统一升级或用 getdeps.py 隔离依赖
  • 忘记链接依赖库:仅链 -lfolly 不够,还需 -lglog -lgflags -lssl -lcrypto -levent 等,pkg-config --libs folly 可查完整列表(安装后支持)
  • 误当 STL 替代:Folly 不提供 vectormap 等基础容器的通用替代,它的容器(如 fbvector)有特定优化目标,勿盲目替换

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

520

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

253

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

613

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

548

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

542

2024.04.29

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.9万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号