folly学习心得

Facebook的c++开源库folly介绍 folly在Facebook内部广泛使用的一个c++库,是开源的,github地址: https://github.com/facebook/folly之前的boost库给我们带来了很多方便,比如智能指针之类的。 从c++11开始,对std标准库有了很大的补充,大大方便了c++程序员。folly是Facebook open source library的缩写,其中用到了大量的C++11新标准,代 阅读详情

学习代码库的一般步骤

1) 编译安装;
2) 学习doc/manual文档;
3) 学习test用例;
4) 测试并使用。

folly库的学习心得

独立有用的小技巧

Eventfd.h ---- 针对eventfd系统调用的包装器。

Foreach.h ---- 伪语句(作为宏语句来实现),用于迭代。

IntrusiveList.h --- 方便类型定义,用于使用boost::intrusive_list(不知道干什么的)。

Likely.h ---- 针对__builtin_expect的包装器。分支预测编译加速。

Malloc.h ---- 内存分配助手,尤其是使用jemalloc时。

MapUtil.h ---- 用于查找联合容器的小工具,找不到返回默认值。(比如std::map和std::unordered_map)。

Preprocessor.h ---- 获取可变参数的第1个或第2个参数,用于模板编程!Synchronized.h的实现就靠这个!

ScopeGuard.h ---- Basically, it guarantees that a function is executed upon leaving the currrent scope unless otherwise told. 即确保资源能够被正确析构(调用资源析构函数)。

StlAllocator.h ---- STL分配器,包装简单的分配/取消分配接口。貌似为了低版本gcc。

Traits.h ---- 类型特性。用于判断类型是否可直接内存拷贝(可重定位的对象)。C++假定所有的对象都是“non-relocatable values”(需要调用构造函数而不能直接拷贝内存数据)。实际中,很多C++对象可通过直接拷贝内存数据完成对象"再造"!(Relocatable object/type -- 可重定位的对象/类型)。Traits.h的核心就是提供"可重定位的类型"编译时判断工具。FBvector的核心优化之一:利用memcpy/memmove来处理"可重定位的类型"!

C++功能增强和扩展

FBString.h ---- std::string性能优化版本。

FBvector.h ---- std::vector性能优化版本。

Bits.h ---- 各种位处理实用组件,针对速度而优化。

Conv.h ---- 各种数据转换例程(尤其是to和from字符串),针对速度和安全进行了优化。

DiscriminatedPtr.h ---- 类似boost::variant,但完全局限于指针。使用指针中最高位、未使用的16位作为鉴别器。所以sizeof(DiscriminatedPtr<int, string, Widget>) == sizeof(void*)。

Dynamic.h ---- 动态类型对象,类似boost::variant。用于json.h。

Format.h ---- Python式样的格式化实用组件。C++功能增强和扩展的集大成者,基本上用到了上述的各个头文件!

Range.h ---- 类Boost的随机访问数据包装类,针对StringPiece的定制版本。

String.h ---- 非常有用的string工具集合:std::string <=> FBstring 互转工具、C风格转义字符串工具(反转工具)、stringPrintf工具、prettyPrint(支持时间、容量等常见单位)、hexDump工具、errnoStr\exceptionStr、demangle(串化C++类型)、split(分拆字符串)。

Unicode.h ---- 定义了codePointToUtf8函数。实现unicode码点到utf-8编码的转换。

简化多线程编程

Arena.h,ThreadCachedArena.h ---- 内存分配的简单地方:多次内存分配同时被释放。使用线程版本。简化内存管理,相当于java的gc(垃圾回收机制)。

AtomicHashMap.h,AtomicHashArray.h ---- 高性能的原子哈希图,采用几乎无锁的操作。

ProducerConsumerQueue.h ---- 单生产者单消费者队列。

SmallLocks.h ---- 非常小的旋转锁(1字节和1位)。

Synchronized.h ---- 提供一种非常好的多线程同步编码范式!!!请直接看doc和测试代码!

ThreadLocal.h ---- 改进的线程本地存储,用于存储非内置类型。取代pthread_key_t。

ThreadCachedInt.h ---- 使用线程缓存的高性能原子增量。

独立组件

Hash.h ---- 各种流行的哈希函数实现。

GroupVarint.h ---- 针对32位值的Group Varint编码。

Histogram.h  ---- 用于收集直方图数据。

Json.h ---- JSON序列化器和反序列化器。使用dynamic.h。

Random.h ---- 只定义了一个函数:randomNumberSeed()。使用当前时间和PID来产生随机数种子。

TimeoutQueue.h ---- 定时器队列。按项目设定超时的队列。

就是为了性能

PackedSyncPtr.h ---- 一种高度专业化的数据结构,含有指针、1位旋转锁和15位整数,它们都在一个64位整型数中。目标:节约空间(当前64位机的指针高16位未用)。用到SmallLocks。

RWSpinLock.h ---- 快速而紧凑的读取器/写入器旋转锁。

small_vector.h ---- 含有小缓冲器方面的优化vector,策略可选:NoHeap、OneBitMutex。

sorted_vector_types.h ---- 类似std::map的集合体,但是作为排序向量来实现。适用:数量少。目的:节约空间。

总结

folly最大的不足就是需要C++11的新特性,需要gcc4.6以上的编译器方能使用。若是从学习的角度去看,folly有很多小技巧可学习;若从实用的角度看,folly能够极大地方便多线程编程;若从性能角度看,folly对不少C++功能做了增强和扩展。总之,folly是一个很不错的C++库。就冲着Andrei Alexandrescu的大名也看学习学习。不过从实际工作中看,就不要指望folly能够大大降低工作量了 ^_^。



参考

folly自带的doc和源码

揭秘Facebook官方底层C++函数Folly(docs/Overview.md翻译)


深入了解 Facebook Folly 库:高效编程与系统优化 Facebook开源库(通常称为Folly)是由Facebook工程师团队在维护和发展的开源项目。它起源于2010年左右,旨在解决Facebook内部的高性能编程问题。随着互联网的快速发展,数据量激增,传统框架和库很难满足低延迟和高吞吐量的需求。因此,Facebook推出了Folly,一款专注于性能和资源效率的C++库。其名称来自“Facebook Open Source Library”的缩写。 阅读详情

相关推荐

folly源码分析

facebook folly库,c++11学习的典范,这里有简单分析,可以供大家学习

Folly,一个强大的C++库

Folly库是一个强大而且广泛应用于Facebook的C++库,通过提供高效、可扩展和易用的工具和组件,帮助开发者构建高性能的C++应用程序。本文对Folly库的主要特点进行了详细介绍,并通过示例代码展示了其在实际项目中的应用。希望读者能够通过本文对Folly库有更深入的了解,并在自己的项目中充分发挥其优势,提升代码效率和可扩展性。

红军不怕远征难,万水千山只等闲 4862

ThreadPool:用C ++ 11和Folly实现的简单线程池(facebook C ++基础库)

线程池 用C ++ 11和Folly实现的简单线程池(facebook C ++基础库)

Folly

无论从理论实现上还是性能测试中,fbvector的性能均优于std vector;fbvector对内存管理上更加细粒,并且fbvector也广泛应用于一些对性能要求较高的工程上面。folly依赖于C++14,对于一些低版本的C++项目适配可能会存在问题;folly编译产物默认是静态链接库,在一定程度上会增加可执行文件的内存,也不利于OTA;关于第二点,项目ISSUE中也有讨论,可能在真正使用中应该进行一些必要的评估。

weixin_39427234的博客 2352

DSPACE仿真平台的使用

DSPACE仿真平台的使用 文章目录DSPACE仿真平台的使用1.ModelDesk新建项目2.MotionDesk引入项目3.ControlDesk引入项目4.项目整合运行 我们使用DSPACE仿真平台软件来模拟小汽车的自动驾驶。 总共需要用到DSPACE大类下的三个软件:ModelDesk、ControlDesk、MotionDesk。 1.ModelDesk新建项目 在桌面上点击ModelDesk图标,打开DSPACE—ModelDesk 选择 File 标签,侧边栏选择 New,点击 New A

qq_42582489的博客 7527

手把手教你用Python处理MAHNOB-HCI多模态数据集(含脑电EEG/眼动/视频数据同步实战)

本文详细介绍了如何使用Python处理MAHNOB-HCI多模态数据集,涵盖脑电(EEG)、眼动追踪和视频数据的同步解析与对齐。通过MNE-Python、pandas和OpenCV等工具,实现从BDF、TSV到XML格式的高效处理,解决时间轴对齐难题,助力情感计算与人机交互研究。

weixin_30998797的博客 368

Flutter在OpenHarmony上的实战:藏头诗生成器开发全记录

跨平台开发与国产操作系统生态的结合已成为移动应用领域的重要趋势。Flutter作为一套高效的多端UI框架,凭借其一致的渲染引擎和代码复用能力,正在快速拓展对OpenHarmony的适配支持。理解其核心原理与工程实践,能帮助开发者以更低成本覆盖更多设备。本文以文字创意类应用为切入点,详细剖析如何利用Flutter构建面向OpenHarmony的本地化应用:从需求拆解、基于SQLite的语料库设计、藏头诗匹配算法,到平台通道调用鸿蒙原生能力、Isolate并发计算优化性能,再到常见问题的排查思路。文章兼顾技术科

weixin_33922672的博客 392

关于MII、RMII、GMII、RGMII、PHY、网络变压器、RJ45的硬件总结

文章目录前言一、网络传输结构及原理1.以太网的工作原理2.TCP/IP协议3.数据链路层(MAC)二、介质独立接口MII,RMII,GMII,RGMII1.MII(Media Independent interface)2.RMII(Reduced Media Independent Interface)3.GMII(Gigabit Medium Independent)4.RGMII(Reduced Gigabit Media Independent Interface)三、物理层芯片(PHY)二、使用步

weixin_44415816的博客 3万+

folly学习心得(转)

转载于:https://www.cnblogs.com/lenmom/p/9283031.html

weixin_30466039的博客 113

1. 如何使用扣子工作流一键生成儿童绘本(可以发到小红书,微信公众号图文等)

本文介绍了使用扣子智能体一键生成儿童绘本的工作流。用户只需输入绘本主题,系统会自动生成Markdown格式内容,可直接发布到优快云、小红书等平台,还支持推送至微信公众号草稿箱。操作步骤包括:访问扣子网站导入工作流源代码,输入主题试运行,查看实时进度和最终输出结果。工作流编辑器会显示每个节点的执行状态和耗时,支持通过"查看日志"功能回溯历史运行记录。文末附有工作流源代码下载链接。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1245

爆肝整理:微信公众号文章HTML编写完整规范,运营必备手册

微信公众号文章排版总是出错?📱 这份完整的HTML编写规范文档帮你彻底解决!文档包含所有支持的标签、CSS属性、实用代码模板和注意事项 📋,让你快速掌握微信文章的HTML编写技巧,告别第三方编辑器依赖 ✅

XiaoqiangClub的博客 2305

openclaw 保姆级部署与核心玩法解析:国产DeepSeek模型 + 飞书

OpenClaw是一款功能强大的开源AI个人助理,支持全平台私有化部署,数据完全本地掌控。它不仅可通过聊天窗口直接操控电脑(安装软件、创建项目),还支持接入飞书等主流通讯工具,化身24小时在线的智能助理。本文提供了从零开始的详细部署教程,涵盖基础安装、模型配置(如GLM-4、DeepSeek)到飞书集成的完整实战指南,助你将这款“核动力”AI助手快速融入日常工作流。

甘蓝的专栏 2998

Design Patterns In Modern C++中文版项目贡献指南:如何参与翻译与改进

欢迎来到Design Patterns In Modern C++中文版翻译项目!🎉 这是一项专注于将经典设计模式与现代C++编程语言相结合的开源翻译项目,旨在为中文开发者提供高质量的设计模式学习资源。无论您是C++初学者还是经验丰富的开发者,都可以通过参与这个项目来提升自己的技能,同时为开源社区贡献力量。 ## 📚 项目简介与核心价值 Design Patterns In Modern

gitblog_00135的博客 857

Linux系统之部署经典魔塔小游戏

Linux系统之部署经典魔塔小游戏

jks212454的博客 1814

揭秘Facebook官方底层C++函数Folly

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33915554的博客 771

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Folly,一个 Facebook 打造的强大 C++ 库!

宝子们,今天咱来探索一个超厉害的 C++ 库——Folly。它是 Facebook 精心打造的,能让咱们的 C++ 编程变得更加轻松高效。这里面有好多实用的工具和数据结构,就像一个装满各种奇妙工具的百宝箱,无论是处理复杂的数据,还是优化程序的性能,Folly 都能帮上大忙。一、Folly 基础概念啥是 Folly 呢? 简单说,它就是一个 C++ 库,里面有各种各样的工具类和函数,就像是一个大超市...

一行玩python 1547

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

探索Folly:Facebook的高性能C++库

探索Folly:Facebook的高性能C++库 【免费下载链接】folly An open-source C++ library developed and used at Facebook. 项目地址: https://gitcode.com/GitHub_T...

gitblog_00007的博客 1361

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

漫步Facebook开源C++库folly(1):string类的设计

就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列、字符串、向量、内存分配、位处理等,以满足大规模高性能的需求。 这里是folly的github地址:https://github.com/facebook/folly 在folly项目的Overview.md中,谈到了folly库的初衷: It complements (as opposed to com...

weixin_30856725的博客 281

C++ folly库解读(三)Synchronized —— 比std::lock_guard/std::unique_lock更易用、功能更强大的同步机制

目录返利 www.cpa5.cn 传统同步方案的缺点 folly/Synchronized.h 简单使用 Synchronized的模板参数 withLock()/withRLock()/withWLock() —— 更易用的加锁方式 升级锁 ulock()和 withULockPtr() Timed Locking Synchronized 与 std::condition_variable acquireLocked() —— 同时锁多个数据 使用一把锁,锁多个数据 struct std::tuple.

weixin_48967543的博客 1090

探索高效能编程:Folly 框架深度解析与实践指南

探索高效能编程:Folly 框架深度解析与实践指南 去发现同类优质开源项目:https://gitcode.com/ 1、项目介绍 Folly 是一个由 Facebook 开源的 C++ 库,旨在为大规模服务器开发提供高效的工具和组件。它的名称来源于“Flickr”的缩写以及英文单词 "folly"(轻率的行为),暗示了这个库在简化复杂问题上的聪明才智。Folly 主要关注性能...

gitblog_00055的博客 1256

Facebook Folly源代码分析

Folly是Facebook的一个开源C++11组件库,它提供了类似Boost库和STL的功能,包括散列、字符串、向量、内存分配、位处理等,用于满足大规模高性能的需求。 6月初,Facebook宣布将其内部使用的底层C++...

congjiayan6179的博客 998

攻克RISC-V:Facebook Folly库编译实战指南

你是否在RISC-V架构上编译Facebook Folly库时遇到过"架构不支持"的错误?作为Facebook开源的高性能C++库,Folly在嵌入式设备和边缘计算场景中需求激增,但官方并未提供RISC-V的原生支持。本文将通过6个实战步骤,帮助你在RISC-V平台成功编译运行Folly库,解决90%的架构适配问题。 读完本文你将掌握: - 定制RISC-V交叉编译工具链的正确姿势 - 调整CM...

gitblog_00151的博客 356
上一篇: intel dpdk api ring 模块源码详解
下一篇: redhat6.4 安装codeblocks
Maybe______
博客等级 码龄10年 26粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值