安装folly库以及folly的ConcurrentHashMap的简单使用

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

我在写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>
classStudent {
public:
    Student(std::string name, int id, std::stringemail)
        : 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::stringm_name;
    intm_id;
    std::stringm_email;
};
intmain() {
    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: 1email: tom@gmail.com
name: Lilly id: 2 email: lilly@gmail.com

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

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

免责声明:文章转载自《安装folly库以及folly的ConcurrentHashMap的简单使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[nRF51822]1. 点亮一个LEDAppInventor学习笔记(五)——瓢虫快跑应用学习下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

25 个 Linux 下最炫酷又强大的命令行神器

众所周知,我们在 Linux 下大多数时候是使用命令行来处理任务的。这样不但操作起来效率比较高,而且界面也比较炫酷。下面,我们就给大家推荐一些不但炫酷又好用的 Linux 命令行神器。 1. exa exa 是一个用来替代 ls 的工具, exa 相比于 ls 增加了很多新的特性,比如:支持不同文件类型可以用不同颜色来展示、exa 比 ls 速度更快一些...

在浏览器上实时显示机械臂运动,treeJS机械臂运动

背景 在网页上同步实时根据机械臂上传上的数据进行机械臂模型运动。在网页上运行借助于threeJS来进行实现。运动核心内容学习参考网址:https://www.cnblogs.com/zhnblog/p/6882683.html。本文章实现效果是六轴机械臂通过数据来进行实时运动的数字孪生。 实现 一定要看这个网址https://www.cnblogs.com...

BLDC开发笔记4.转速的计算

以下结合自己的理解,如有错误请帮忙及时指正。 转速公式 转速的计算我现在是通过一定时间内,霍尔信号的边沿数量来计算的。这里每隔50ms在滴答定时器中断服务函数里面计算一次。霍尔信号每变化一次,就产生一次霍尔触发中断。因为我的电机是2对极,所以在一圈内有12个霍尔状态,即电机转动一圈会触发12次中断。假设在50ms内,霍尔触发了 n 次中断,我们可以得到转速...

关于VScode切换、拉取、推送、合并分支,并解决冲突

一.切换分支输入命令“git branch -a”,查看远程分支输入命令“git checkout dev”,切换到分支dev输入命令“git status”,查看分支状态,比如是否有未保存的修改、未解决的冲突 二.拉取分支git pull:拉取远程的数据同步到自己的目录的命令,前提是没有未保存的代码以及没有未解决的冲突其它拉取方法: 左侧导航栏找到源代码...

如何获取url访问历史记录

  在院里的群里,有人问了这么一个问题:   A页面提交表单到B页面,然后在B页面点了后退,如果在A页面上判断是直接访问的还是后退进去的呢?我不想改B页面。   于是乎本着热心人的想法,我就帮他搞了搞,首先我想到了window.history,不过很遗憾,其没有提供相应的属性,只是提供了向前和向后跳转的方法。于是乎我找到了document.referrer...

开源中国社区项目部署

一.官方网站 https://git.oschina.net/ 开源中国社区成立于2008年8月,其目的是为中国的IT技术人员提供一个全面的、快捷更新的用来检索开源软件以及交流使用开源经验的平台 目前国内有很多公司会将公司的项目部署在OSChina 二.与GitHUB的对比 服务器在国内,速度更快 免费账户同样可以建立私有项目,而GitHUB上要建...