一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

電子發(fā)燒友App

硬聲App

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

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

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

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

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

資料介紹

授權(quán)協(xié)議 MIT
開(kāi)發(fā)語(yǔ)言 C/C++
操作系統(tǒng) 跨平臺(tái)
軟件類(lèi)型 開(kāi)源軟件

軟件簡(jiǎn)介

Basic

CO?是一個(gè)優(yōu)雅、高效的 C++ 基礎(chǔ)庫(kù),支持 Linux, Windows 與 Mac 平臺(tái)。CO?追求極簡(jiǎn)、高效,不依賴(lài)于?boost?等三方庫(kù)。

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

參考文檔

亮點(diǎn)功能

  • co

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

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

    • 協(xié)程共享線(xiàn)程棧(默認(rèn)大小為 1MB),內(nèi)存占用極低,單機(jī)可輕松創(chuàng)建數(shù)百萬(wàn)協(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ò)庫(kù),可輕松實(shí)現(xiàn)同時(shí)支持?ipv4?與?ipv6?的網(wǎng)絡(luò)程序,包含如下幾個(gè)模塊:

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

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

    • rpc 模塊,基于 json 的 rpc 框架,單線(xiàn)程 qps 可達(dá)到 12w+.

    • 實(shí)現(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;
    }
    • 實(shí)現(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?是一個(gè)超級(jí)快的本地日志系統(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

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

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

  • flag

    flag?是一個(gè)方便、易用的命令行及配置文件解析庫(kù),支持自動(dòng)生成配置文件。

    #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;
    }

    編譯后運(yùn)行:

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

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

代碼構(gòu)成

  • co/include

    libco?的頭文件。

  • co/src

    libco?的源代碼。

  • co/test

    一些測(cè)試代碼,每個(gè)?.cc?文件都會(huì)編譯成一個(gè)單獨(dú)的測(cè)試程序。

  • co/unitest

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

  • co/gen

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

編譯執(zhí)行

xmake

CO?推薦使用?xmake?進(jìn)行編譯。

  • 編譯器

  • 安裝 xmake

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

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

    export XMAKE_ROOT=y
  • 快速上手

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

    xmake build libco       # 編譯 libco
    xmake -b libco          # 與上同
  • 編譯及運(yùn)行 unitest 代碼

    co/unitest?是單元測(cè)試代碼,用于檢驗(yàn) libco 庫(kù)功能的正確性。

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

    co/test?包含了一些測(cè)試代碼。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             # 測(cè)試 flag 庫(kù)
    xmake r log                  # 測(cè)試 log 庫(kù)
    xmake r log -cout            # 終端也打印日志
    xmake r log -perf            # log 庫(kù)性能測(cè)試
    xmake r json                 # 測(cè)試 json
    xmake r rapidjson            # 測(cè)試 rapidjson
    xmake r rpc                  # 啟動(dòng) rpc server
    xmake r rpc -c               # 啟動(dòng) rpc client
    xmake r easy -d xxx          # 啟動(dòng) 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.
  • 編譯生成的庫(kù)文件在 build/lib 目錄下,可執(zhí)行文件在 build/bin 目錄下.
  • 可以用?BUILD_ALL?指定編譯所有項(xiàng)目.
  • 可以用?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?包含了一些其他項(xiàng)目的代碼,可能使用了與?CO?不同的 License,詳情見(jiàn)?LICENSE.md

特別致謝

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

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

評(píng)論

查看更多

下載排行

本周

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

本月

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

總榜

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