電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>CO是高效的C++基礎(chǔ)庫

CO是高效的C++基礎(chǔ)庫

2022-06-21 | zip | 0.37 MB | 次下載 | 2積分

資料介紹

授權(quán)協(xié)議 MIT
開發(fā)語言 C/C++
軟件類型 開源軟件

軟件簡介

Basic

CO?是一個優(yōu)雅、高效的 C++ 基礎(chǔ)庫,支持 Linux, Windows 與 Mac 平臺。CO?追求極簡、高效,不依賴于?boost?等三方庫。

CO?包含協(xié)程庫(golang-style)、網(wǎng)絡(luò)庫(tcp/http/rpc)、日志庫、命令行與配置文件解析庫、單元測試框架、json 庫等基本組件。

參考文檔

亮點功能

  • co

    co?是一個?golang?風(fēng)格的 C++ 協(xié)程庫,有如下特性:

    • 支持多線程調(diào)度,默認(rèn)線程數(shù)為系統(tǒng) CPU 核數(shù).

    • 協(xié)程共享線程棧(默認(rèn)大小為 1MB),內(nèi)存占用極低,單機可輕松創(chuàng)建數(shù)百萬協(xié)程.

    • 支持系統(tǒng) api hook (Linux & Mac).

    • 支持協(xié)程鎖?co::Mutex.

    • 支持協(xié)程同步事件?co::Event.

    • 支持協(xié)程池?co::Pool.

    • 用?go()?創(chuàng)建協(xié)程:

    void fun() {
        std::cout << "hello world" << std::endl;
    }
    
    go(fun);
  • so

    so?是基于協(xié)程的 C++ 網(wǎng)絡(luò)庫,可輕松實現(xiàn)同時支持?ipv4?與?ipv6?的網(wǎng)絡(luò)程序,包含如下幾個模塊:

    • tcp 模塊, 支持一般的 tcp 編程.

    • http 模塊, 支持基本的 http 編程.

    • rpc 模塊,基于 json 的 rpc 框架,單線程 qps 可達到 12w+.

    • 實現(xiàn)靜態(tài)?web server:

    #include "co/flag.h"
    #include "co/log.h"
    #include "co/so.h"
    
    DEF_string(d, ".", "root dir"); // 指定 web server 根目錄
    
    int main(int argc, char** argv) {
        flag::init(argc, argv);
        log::init();
    
        so::easy(FLG_d.c_str()); // mum never have to worry again
    
        return 0;
    }
    • 實現(xiàn)一般的 http server:
    http::Server serv("0.0.0.0", 80);
    
    serv.on_req(
        [](const http::Req& req, http::Res& res) {
            if (req.is_method_get()) {
                if (req.url() == "/hello") {
                    res.set_status(200);
                    res.set_body("hello world");
                } else {
                    res.set_status(404);
                }
            } else {
                res.set_status(501);
            }
        }
    );
    
    serv.start();
  • log

    log?是一個超級快的本地日志系統(tǒng),打印日志比?printf?更安全:

    LOG << "hello " << 23;  // info
    ELOG << "hello again";  // error

    下面直觀感受一下?log?的性能:

    log vs glog google glog co/log
    win2012 HHD 1.6MB/s 180MB/s
    win10 SSD 3.7MB/s 560MB/s
    mac SSD 17MB/s 450MB/s
    linux SSD 54MB/s 1023MB/s

    上表是單線程連續(xù)打印 100 萬條 info 日志(每條 50 字節(jié)左右)的測試結(jié)果,co/log?幾乎快了?glog?兩個數(shù)量級。

    為何如此快?一是 log 庫內(nèi)部基于比?sprintf?快 8-25 倍的?fastream?實現(xiàn),二是 log 庫幾乎沒有什么內(nèi)存分配操作。

  • flag

    flag?是一個方便、易用的命令行及配置文件解析庫,支持自動生成配置文件。

    #include "co/flag.h"
    
    DEF_int32(i, 32, "comments");
    DEF_string(s, "xxx", "string type");
    
    int main(int argc, char** argv) {
        flag::init(argc, argv);
        std::cout << "i: " << FLG_i << std::endl;
        std::cout << "s: " << FLG_s << std::endl;
        return 0;
    }

    編譯后運行:

    ./xx                          # 以默認(rèn)參數(shù)啟動
    ./xx -i=4k -s="hello world"   # 整數(shù)類型可以帶單位 k,m,g,t,p, 不分大小寫
    ./xx -i 4k -s "hello world"   # 與上等價
    ./xx --mkconf                 # 自動生成配置文件 xx.conf
    ./xx -config=xx.conf          # 從配置文件啟動
  • json

    json?是一個速度堪比?rapidjson?的 json 庫,如果使用?jemalloc,parse?與?stringify?的性能會進一步提升。此庫對 json 標(biāo)準(zhǔn)的支持不如 rapidjson 全面,但能滿足程序員的基本需求,且更容易使用。

代碼構(gòu)成

  • co/include

    libco?的頭文件。

  • co/src

    libco?的源代碼。

  • co/test

    一些測試代碼,每個?.cc?文件都會編譯成一個單獨的測試程序。

  • co/unitest

    一些單元測試代碼,每個?.cc?文件對應(yīng)不同的測試單元,所有代碼都會編譯到單個測試程序中。

  • co/gen

    代碼生成工具,根據(jù) proto 文件,自動生成 rpc 框架代碼。

編譯執(zhí)行

xmake

CO?推薦使用?xmake?進行編譯。

  • 編譯器

  • 安裝 xmake

    windows, mac 與 debian/ubuntu 可以直接去 xmake 的?release?頁面下載安裝包,其他系統(tǒng)請參考 xmake 的?Installation?說明。

    xmake 在 linux 上默認(rèn)禁止 root 用戶編譯,ruki?說不安全,可以在?~/.bashrc?中加上下面的一行,啟用 root 編譯:

    export XMAKE_ROOT=y
  • 快速上手

    # 所有命令都在 co 根目錄執(zhí)行,后面不再說明
    xmake       # 默認(rèn)編譯 libco 與 gen
    xmake -a    # 編譯所有項目 (libco, gen, co/test, co/unitest)
  • 編譯 libco

    xmake build libco       # 編譯 libco
    xmake -b libco          # 與上同
  • 編譯及運行 unitest 代碼

    co/unitest?是單元測試代碼,用于檢驗 libco 庫功能的正確性。

    xmake build unitest     # build 可以簡寫為 -b
    xmake run unitest -a    # 執(zhí)行所有單元測試
    xmake r unitest -a      # 同上
    xmake r unitest -os     # 執(zhí)行單元測試 os
    xmake r unitest -json   # 執(zhí)行單元測試 json
  • 編譯及運行 test 代碼

    co/test?包含了一些測試代碼。co/test 目錄下增加?xxx.cc?源文件,然后在 co 根目錄下執(zhí)行?xmake build xxx?即可構(gòu)建。

    xmake build flag             # 編譯 flag.cc
    xmake build log              # 編譯 log.cc
    xmake build json             # 編譯 json.cc
    xmake build rapidjson        # 編譯 rapidjson.cc
    xmake build rpc              # 編譯 rpc.cc
    xmake build easy             # 編譯 so/easy.cc
    xmake build pingpong         # 編譯 so/pingpong.cc
    
    xmake r flag -xz             # 測試 flag 庫
    xmake r log                  # 測試 log 庫
    xmake r log -cout            # 終端也打印日志
    xmake r log -perf            # log 庫性能測試
    xmake r json                 # 測試 json
    xmake r rapidjson            # 測試 rapidjson
    xmake r rpc                  # 啟動 rpc server
    xmake r rpc -c               # 啟動 rpc client
    xmake r easy -d xxx          # 啟動 web server
    xmake r pingpong             # pingpong server:   127.0.0.1:9988
    xmake r pingpong ip=::       # pingpong server:   :::9988  (ipv6)
    xmake r pingpong -c ip=::1   # pingpong client -> ::1:9988
  • 編譯 gen

    # 建議將 gen 放到系統(tǒng)目錄下(如 /usr/local/bin/).
    xmake build gen
    gen hello_world.proto

    proto?文件格式可以參考?hello_world.proto。

  • 安裝

    # 默認(rèn)安裝頭文件、libco、gen
    xmake install -o pkg          # 打包安裝到 pkg 目錄
    xmake i -o pkg                # 同上
    xmake install -o /usr/local   # 安裝到 /usr/local 目錄

cmake

izhengfan?幫忙提供了 cmake 支持:

  • 默認(rèn)只編譯?libco?與?gen.
  • 編譯生成的庫文件在 build/lib 目錄下,可執(zhí)行文件在 build/bin 目錄下.
  • 可以用?BUILD_ALL?指定編譯所有項目.
  • 可以用?CMAKE_INSTALL_PREFIX?指定安裝目錄.
mkdir build && cd build
cmake ..
cmake .. -DBUILD_ALL=ON -DCMAKE_INSTALL_PREFIX=pkg
make -j8
make install

License

CO?以?MIT?License 發(fā)布.?CO?包含了一些其他項目的代碼,可能使用了與?CO?不同的 License,詳情見?LICENSE.md。

特別致謝

  • co/context?的相關(guān)代碼取自?ruki?的?tbox,特別表示感謝!
  • co 英文參考文檔,由?Leedehai(1-10),daidai21(11-15) 與?google?翻譯,特別表示感謝!
  • ruki?幫忙改進了 xmake 編譯腳本,特別表示感謝!
  • izhengfan?提供了 cmake 編譯腳本,特別表示感謝!
?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費