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库的安装和简单使用, 可以作为参考.

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

  • 相关阅读:
    python 获取当前文件夹下所有文件名
    leetcode 205. Isomorphic Strings
    leetcode 204. Count Primes
    leetcode 203. Remove Linked List Elements
    神经网络中的激活函数tanh sigmoid RELU softplus softmatx
    leetcode 189. Rotate Array
    一个简单的二进制加法器
    AliOS编译安装MyRocks
    MYSQL5.7无法启动服务原因及解决方案
    基础知识巩固笔记(链接、装载与库)
  • 原文地址:https://www.cnblogs.com/albizzia/p/10824721.html
Copyright © 2011-2022 走看看