安装folly库以及folly的ConcurrentHashMap的简单使用
我在写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 _build
cmake ..
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", , "tom@gmail.com"));
students.insert("Lilly", Student("Lilly", , "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: email: tom@gmail.com
name: Lilly id: email: lilly@gmail.com
这些就是对于folly库的安装和简单使用, 可以作为参考.
如果有什么建议或者提议, 可以提出.
安装folly库以及folly的ConcurrentHashMap的简单使用的更多相关文章
- [原创]CentOS6.4编译安装Facebook的folly库(gcc4.8.1boost1.5.3)
Folly: Facebook Open-souce LibrarY,Facebook开源的一个基础组件库,据说在大规模的场景中性能较高.目前因为自己负责的系统有几个地方性能较差,因此特意找来看看 ...
- C++ folly库解读(二) small_vector —— 小数据集下的std::vector替代方案
介绍 使用场景 为什么不是std::array 其他用法 其他类似库 Benchmark 代码关注点 主要类 small_vector small_vector_base 数据结构 InlineSto ...
- C++ folly库解读(三)Synchronized —— 比std::lock_guard/std::unique_lock更易用、功能更强大的同步机制
目录 传统同步方案的缺点 folly/Synchronized.h 简单使用 Synchronized的模板参数 withLock()/withRLock()/withWLock() -- 更易用的加 ...
- CocoaPods升级安装三方库报错
CocoaPods升级后(最新版本1.0.1),安装第三方库的时候会报如下错误: The dependency `AFNetworking (~> 3.1.0)` is not used in ...
- OSX下 pip更新及安装python库
直接执行安装命令 $ pip install builtwith 提示pip当前版本为7.1.2,要使用"pip install --upgrade pip"升级到8.1.2 $ ...
- centos7.0 安装字体库
最近在centos7.0下用itextpdf将word文档转成pdf时出现字体丢失的情况.网上找了很多资料,各式各样的原因和解决方法.后来经过一番测试发现是centos7.0 minimal没有安装相 ...
- 安装numpy库
1.先安装pip: 下载地址:http://pypi.python.org/pypi/pip#downloads 下载pip-8.1.2.tar.gz(md5,pgp)完成之后,解压到一个文件夹,cm ...
- 【转】安装第三方库出现 Python version 2.7 required, which was not found in the registry
安装第三方库出现 Python version 2.7 required, which was not found in the registry 建立一个文件 register.py 内容如下. 然 ...
- CentOS 7 安装字体库 & 中文字体
前言 报表中发现有中文乱码和中文字体不整齐(重叠)的情况,首先考虑的就是操作系统是否有中文字体,在CentOS 7中发现输入命令查看字体列表是提示命令无效: 如上图可以看出,不仅没有中文字体,连字体 ...
随机推荐
- [转]centos sqlite3安装及简单命令
安装: 方法一: wget http://www.sqlite.org/sqlite-autoconf-3070500.tar.gz tar xvzf sqlite-autoconf-3070500. ...
- 使用EF 4.1的DbContext的方法大全
简述:EF4.1包括Code First和DbContext API.DbContext API为EF提供更多的工作方式:Code First,Database First和Model First. ...
- C# .NET 私钥 RSA2,SHA256,签名
私钥长度2048 -- /// <summary> /// 生成签名 /// </summary> /// <param name="str"> ...
- PHP命令行参数
原文地址:http://php.swoole.com/wiki/PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0 PHP命令行参数 目录 [隐藏] ...
- 使用WinFrom + CefSharp 开发客户端程序
今天使用CefSharp,加上本地资源文件嵌入了HTML.CSS.JS文件,做为Winform的UI:效果不错,漂亮可控,简简单单,半天时间搞定从开发到上线: 下面记录下相关的备忘: (窗口的效果) ...
- eoj monthly 2019.11
原题 T1 纸条 题目大意: 给出一个长度为n的字符串,其中m位未知,对于每一位未知的字母,有k个备选字母,最终答案为备选字母按字典序排序后的第x个. 题解: 签到题-- 按照题目意思直接写就可以了. ...
- Java基础笔试练习(十二)
1.(C#.JAVA)扩展方法能访问被扩展对象的public成员 A.能 B.不能 答案: A 解析: 翻译一下,子类方法是否能够访问父类中的public成员. 2.如果子类要调用父类的构造函数,则通 ...
- Ubuntu下载搜狗输入法
实在...因为百度上写的就很好了,所以这里就直接“链”了.. https://jingyan.baidu.com/article/2d5afd6933a67b85a2e28e9f.html
- Huawei重新开启隐藏桌面功能
在HUAWEI的EMUI系统7.0的时候我们都能发现桌面上靠手指操作的隐藏桌面的功能,像这样: 但是在之后的EMUI8.0.9.0,之后就没有办法用了.后来问了官方,这个功能确实是被去掉了.个人也很不 ...
- VirtualBox安装文档教程
1找到安装包双击打开 2 3 这里可以更改安装路径 4 5 6 7 等待安装 8