我在写grpc的实例时, 需要使用一个多线程的hash map, C++标准库中没有多线程的hash map, facebook开源的folly中存在大量的基础类, 中间存在一个高性能的hash map,这个正是我所需要的, 所以在这里简介一下folly库, 按照官方说明, folly库安装需要gcc 5.1+ 和支持C++14的编译器编译的boost.

在安装folly之前, 还需要安装google的glog, glog的github仓库在:

https://github.com/google/glog

可以从https://github.com/google/glog/releases下载一个release包, 然后使用如下的命令进行安装:

./autogen.sh && ./configure && make && make install # may use sudo

通过上述方式安装的glog是动态库, 在使用folly库的时候, 很多时候可能需要用到glog.

folly库的github仓库地址在:

https://github.com/facebook/folly.git

其中我需要使用的ConcurrentHashMap在folly/folly/concurrency/目录, 对应的地址在 https://github.com/facebook/folly/tree/master/folly/concurrency.

folly库默认安装是静态库, 所以只需要在开发环境安装就可以了, 这里我只讲解在ubuntu 16.04+ 下的安装, 关于测试相关的安装, 需要依赖于googletest, 这些也不打算讲.

(1) 安装一些依赖包:

sudo apt-get install \g++ \cmake \libboost-all-dev \libevent-dev \libdouble-conversion-dev \libgoogle-glog-dev \libgflags-dev \libiberty-dev \liblz4-dev \liblzma-dev \libsnappy-dev \make \zlib1g-dev \binutils-dev \libjemalloc-dev \libssl-dev \pkg-config

(2) 安装一些高级调试功能:

sudo apt-get install \libunwind8-dev \libelf-dev \libdwarf-dev

(3) 下载folly的release包, release包的位置在:

https://github.com/facebook/folly/releases

下载之后, 将压缩包移动到你想要放的位置, 然后解压, 然后进入folly的主目录( 我下载的是folly-2019.05.06.00.tar.gz, 所以我调用的命令是cd folly-2019.05.06.00).

然后就可以编译源代码了, 调用的命令如下:

  mkdir _build && cd _buildcmake ..make -j $(nproc)make install # with either sudo or DESTDIR as necessary

这样folly库就安装成功了, 下面简单介绍一下folly库的ConcurrentHashMap的使用.

使用ConcurrentHashMap的代码如下:

#include <folly/concurrency/ConcurrentHashMap.h>
#include <string>
#include <iostream>class Student {
public:Student(std::string name, int id, std::string email): m_name(name), m_id(id), m_email(email){}void printSelf() const {std::cout << "name: " << m_name << " "<< "id: " << m_id << " "<< "email: " << m_email << std::endl;}private:std::string m_name;int m_id;std::string m_email;
};int main() {folly::ConcurrentHashMap<std::string, Student> students;students.insert("Tom", Student("Tom", 1, "tom@gmail.com"));students.insert("Lilly", Student("Lilly", 2, "lilly@gmail.com"));for (const auto& st : students) {st.second.printSelf();}
}

可以调用如下的命令来编译:

g++ follytest.cpp -lfolly -lglog -ldl -ldouble-conversion -lpthread -liberty -o students

运行上述代码的输出如下:

$ ./students
name: Tom id: 1 email: tom@gmail.com
name: Lilly id: 2 email: lilly@gmail.com

这些就是对于folly库的安装和简单使用, 可以作为参考.

如果有什么建议或者提议, 可以提出.

转载于:https://www.cnblogs.com/albizzia/p/10824721.html

安装folly库以及folly的ConcurrentHashMap的简单使用相关推荐

  1. folly库安装(1)cmake和gcc的安装、升级

    facebook的folly库是个很强大的c++库,是对标准c++库的强大补充,里面提供了很多高性能的组件,比如FbString, Futures, Executors, ConcurrentHash ...

  2. folly库的安装-Ubuntu18.04

    版权声明:原创文章,欢迎转载,但请注明出处,谢谢. https://blog.csdn.net/qiuguolu1108/article/details/106445831 folly库是facebo ...

  3. folly库安装(4)folly依赖的重要组件安装:double-conversion, google-gflags, glog, fmt, googletest, boost等

    folly库依赖的组件版本可以在build\fbcode_builder\manifests目录查看,比如需要查看double-conversion的版本,只需要打开double-conversion ...

  4. centos 6.5安装c++ folly库

    一.引言 Folly:是一个在Facebook内部广泛和可重复使用的C++库组件大集合 wangle:C++网络库 proxygen:C++ http框架 在安装所有的库之前请检查你系统里面的基础编译 ...

  5. Ubuntu18.04安装facebook folly库

    安装步骤 安装boost ubuntu18.04安装的boost有点陈旧,因此自行下载最新版本,执行安装即可:https://www.boost.org/ 具体步骤直接参考readme 安装gtest ...

  6. folly库安装(3)libevent、libunwind的安装

    libevent是用C语言编写的.高性能的.基于事件驱动的网络通信库.这个库历史悠久,应用广泛,作为程序员去了解下这个库,肯定能收获很多知识.这里我先讲解下怎么安装libevent,后面我会写一系列文 ...

  7. 交叉编译folly库

    假定交叉编译链工具所在目录为:/home/softwares/gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu/bin/,其c++编译器为:/home ...

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

    目录 返利 www.cpa5.cn 传统同步方案的缺点 folly/Synchronized.h 简单使用 Synchronized的模板参数 withLock()/withRLock()/withW ...

  9. Centos安装GD库

    tar zxvf ncurses-5.6.tar.gz 进入目录 cd ncurses-5.6 生成 makefile文件, 再进一步编译 ./configure --prefix=/usr --wi ...

最新文章

  1. xshell virt-manager RuntimeError: could not open display
  2. 初识C语言---(1)
  3. c语言中存储字符用什么函数,那些C语言中你不知道的字符串函数(坑)
  4. php 实现 html转js
  5. 还在对java类、类的加载一知半解?这篇文章相信会解决你80%的困惑
  6. 将数据从 SQL Server 导入 Azure Storage Table
  7. 数据结构——模式匹配kmp算法
  8. bzoj2375 疯狂的涂色
  9. Java中怎么样检查一个字符串是不是数字呢
  10. 发布任务PHP源码,Thinkphp5新威客任务平台源码
  11. 做po_requisitions_interface_all接口开发问题
  12. Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接
  13. 计算尖峰电流的目的_183 新能源汽车电机控制器母线电容容值如何计算?
  14. 入门北京linux嵌入式培训行吗
  15. 【cooper】深度学习入门:基于Python的理论与实现(鱼书)_个人读书笔记
  16. codeforces1467E Distinctive Roots in a Tree
  17. SPICE模型入门到精通
  18. office安装教程
  19. 大数据项目实战——电信业务大数据分析系统
  20. 胡瑜 简介中科院计算机所,胡瑜--中科院计算所计算机体系结构国家重点实验室...

热门文章

  1. 别再纠结指针了!!!
  2. echarts柱状图数据过多
  3. 【PTA】7-2 用虚函数计算各种图形的面积 (10 分)
  4. 计算机知识问答网站,在线答题公开题库 计算机知识 题库.doc
  5. 使用注解实现声明式事务
  6. 《区块链原理与技术》学习笔记(六) — 区块链安全
  7. 快手入局游戏直播 将如何撼动斗鱼虎牙双寡头格局?
  8. 6.7.1 Oops—错误地调用了C r e a t e T h r e a d
  9. Arduino IDE ESP32 C3 “Some indexes could not be updated.”错误
  10. python数组 倒序