資料介紹
軟件簡介
Basic
CO
?是一個優(yōu)雅、高效的 C++ 基礎(chǔ)庫,支持 Linux, Windows 與 Mac 平臺。CO
?追求極簡、高效,不依賴于?boost?等三方庫。
CO
?包含協(xié)程庫(golang-style)、網(wǎng)絡(luò)庫(tcp/http/rpc)、日志庫、命令行與配置文件解析庫、單元測試框架、json 庫等基本組件。
參考文檔
亮點功能
-
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::Event.
-
支持協(xié)程池?co::Pool.
-
用?
go()
?創(chuàng)建協(xié)程:
void fun() { std::cout << "hello world" << std::endl; } go(fun);
-
-
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
?是一個超級快的本地日志系統(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
?是一個方便、易用的命令行及配置文件解析庫,支持自動生成配置文件。#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
?是一個速度堪比?rapidjson?的 json 庫,如果使用?jemalloc,parse
?與?stringify
?的性能會進一步提升。此庫對 json 標(biāo)準(zhǔn)的支持不如 rapidjson 全面,但能滿足程序員的基本需求,且更容易使用。
代碼構(gòu)成
-
libco
?的頭文件。 -
libco
?的源代碼。 -
一些測試代碼,每個?
.cc
?文件都會編譯成一個單獨的測試程序。 -
一些單元測試代碼,每個?
.cc
?文件對應(yīng)不同的測試單元,所有代碼都會編譯到單個測試程序中。 -
代碼生成工具,根據(jù) proto 文件,自動生成 rpc 框架代碼。
編譯執(zhí)行
xmake
-
編譯器
- Linux:?gcc 4.8+
- Mac:?clang 3.3+
- Windows:?vs2015+
-
安裝 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。
特別致謝
- C和C++實物精選《C專家編程》 0次下載
- C和C++經(jīng)典著作《C和指針》 0次下載
- C和C++經(jīng)典著作-C專家編程.PDF 0次下載
- Visual C++和MFC創(chuàng)建的應(yīng)用程序基礎(chǔ)知識 0次下載
- C++開源庫的詳細(xì)資料合集免費下載
- C++的框架、庫和資源資料匯總大全
- C++的開源庫大全詳細(xì)資料說明
- C++的框架、庫和代碼分析的資料大全
- C++程序設(shè)計教程之C++工具的詳細(xì)資料說明 4次下載
- C++程序設(shè)計教程之C++的初步知識的詳細(xì)資料說明 31次下載
- VISUAL C++教程之VISUAL C++的安裝和使用方法 19次下載
- 《Visual C++游戲編程基礎(chǔ)》電子書.pdf 0次下載
- c280x / c2801x C / C++頭文件和外周 實例快速啟動 7次下載
- The C++ Standard Library 0次下載
- c++標(biāo)準(zhǔn)庫手冊 43次下載
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeMap 130次閱讀
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeQueue 103次閱讀
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeStack 97次閱讀
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeBlockQueue 116次閱讀
- OpenHarmony標(biāo)準(zhǔn)系統(tǒng)C++公共基礎(chǔ)類庫案例:HelloWorld 220次閱讀
- C++簡史:C++是如何開始的 415次閱讀
- 使用C++編寫通用庫并在 Rust 中使用它 (WASI) 893次閱讀
- 如何把C++程序改寫成C語言 3150次閱讀
- C++ STL基本概念是什么 1222次閱讀
- C與C++混合編程是什么 1309次閱讀
- C++語言的發(fā)展 558次閱讀
- C++封裝:this指針 3371次閱讀
- 一文讀懂boost庫的概念和安裝方式 7333次閱讀
- 基于STM32F4的 C++封裝(完整代碼) 9553次閱讀
- C++輸入/輸出流 876次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多