zoukankan      html  css  js  c++  java
  • 安装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", 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库的安装和简单使用, 可以作为参考.

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

  • 相关阅读:
    Leetcode NO.110 Balanced Binary Tree 平衡二叉树
    Leetcode NO.226 Invert Binary Tree 翻转二叉树
    Leetcode NO.215 Kth Largest Element In An Array 数组中的第K个最大元素
    根据特征的浏览器判断
    Cygwin在打开在当前目录
    【转帖】科学对待 健康养猫 打造快乐孕妇
    解决chrome浏览器安装扩展、应用程序一直处在“检查中”的问题
    对【SQL SERVER 分布式事务解决方案】的心得补充
    关于“点击这里继续访问您选择的百度XXX”
    VBA一例:如何保持文本框焦点
  • 原文地址:https://www.cnblogs.com/albizzia/p/10824721.html
Copyright © 2011-2022 走看看