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