資料介紹
軟件簡介
Basic
CO
?是一個(gè)優(yōu)雅、高效的 C++ 基礎(chǔ)庫,支持 Linux, Windows 與 Mac 平臺(tái)。CO
?追求極簡、高效,不依賴于?boost?等三方庫。
CO
?包含協(xié)程庫(golang-style)、網(wǎng)絡(luò)庫(tcp/http/rpc)、日志庫、命令行與配置文件解析庫、單元測試框架、json 庫等基本組件。
參考文檔
亮點(diǎn)功能
-
co
?是一個(gè)?golang?風(fēng)格的 C++ 協(xié)程庫,有如下特性:-
支持多線程調(diào)度,默認(rèn)線程數(shù)為系統(tǒng) CPU 核數(shù).
-
協(xié)程共享線程棧(默認(rèn)大小為 1MB),內(nèi)存占用極低,單機(jī)可輕松創(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ò)庫,可輕松實(shí)現(xiàn)同時(shí)支持?ipv4
?與?ipv6
?的網(wǎng)絡(luò)程序,包含如下幾個(gè)模塊:-
tcp 模塊, 支持一般的 tcp 編程.
-
http 模塊, 支持基本的 http 編程.
-
rpc 模塊,基于 json 的 rpc 框架,單線程 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è)超級快的本地日志系統(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?兩個(gè)數(shù)量級。
為何如此快?一是 log 庫內(nèi)部基于比?
sprintf
?快 8-25 倍的?fastream?實(shí)現(xiàn),二是 log 庫幾乎沒有什么內(nèi)存分配操作。 -
flag
?是一個(gè)方便、易用的命令行及配置文件解析庫,支持自動(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ù)類型可以帶單位 k,m,g,t,p, 不分大小寫 ./xx -i 4k -s "hello world" # 與上等價(jià) ./xx --mkconf # 自動(dòng)生成配置文件 xx.conf ./xx -config=xx.conf # 從配置文件啟動(dòng)
-
json
?是一個(gè)速度堪比?rapidjson?的 json 庫,如果使用?jemalloc,parse
?與?stringify
?的性能會(huì)進(jìn)一步提升。此庫對 json 標(biāo)準(zhǔn)的支持不如 rapidjson 全面,但能滿足程序員的基本需求,且更容易使用。
代碼構(gòu)成
-
libco
?的頭文件。 -
libco
?的源代碼。 -
一些測試代碼,每個(gè)?
.cc
?文件都會(huì)編譯成一個(gè)單獨(dú)的測試程序。 -
一些單元測試代碼,每個(gè)?
.cc
?文件對應(yīng)不同的測試單元,所有代碼都會(huì)編譯到單個(gè)測試程序中。 -
代碼生成工具,根據(jù) proto 文件,自動(dòng)生成 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 # 編譯所有項(xiàng)目 (libco, gen, co/test, co/unitest)
-
編譯 libco
xmake build libco # 編譯 libco xmake -b libco # 與上同
-
編譯及運(yùn)行 unitest 代碼
co/unitest?是單元測試代碼,用于檢驗(yàn) 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
-
編譯及運(yùn)行 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 # 啟動(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
. - 編譯生成的庫文件在 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,詳情見?LICENSE.md。
特別致謝
- C和C++實(shí)物精選《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ì)資料合集免費(fèi)下載
- C++的框架、庫和資源資料匯總大全
- C++的開源庫大全詳細(xì)資料說明
- C++的框架、庫和代碼分析的資料大全
- C++程序設(shè)計(jì)教程之C++工具的詳細(xì)資料說明 4次下載
- C++程序設(shè)計(jì)教程之C++的初步知識的詳細(xì)資料說明 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)庫手冊 43次下載
- 使用OpenVINO GenAI API在C++中構(gòu)建AI應(yīng)用程序 417次閱讀
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeMap 408次閱讀
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeQueue 340次閱讀
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeStack 361次閱讀
- 基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeBlockQueue 332次閱讀
- OpenHarmony標(biāo)準(zhǔn)系統(tǒng)C++公共基礎(chǔ)類庫案例:HelloWorld 553次閱讀
- C++簡史:C++是如何開始的 637次閱讀
- 使用C++編寫通用庫并在 Rust 中使用它 (WASI) 1133次閱讀
- 如何把C++程序改寫成C語言 3392次閱讀
- C++ STL基本概念是什么 1407次閱讀
- C++語言的發(fā)展 617次閱讀
- C++封裝:this指針 3492次閱讀
- 一文讀懂boost庫的概念和安裝方式 8016次閱讀
- 基于STM32F4的 C++封裝(完整代碼) 9696次閱讀
- C++輸入/輸出流 933次閱讀
下載排行
本周
- 1OAH0428最新規(guī)格書(中文)
- 2.52 MB | 27次下載 | 10 積分
- 2PNE20040CPE-Q雙共陰極超快恢復(fù)整流器規(guī)格書
- 275.16KB | 4次下載 | 免費(fèi)
- 3麻將機(jī)升降電路
- 0.12 MB | 3次下載 | 1 積分
- 4TK8620 開發(fā)板-TKB-620
- 410.54 KB | 2次下載 | 免費(fèi)
- 5NX-HB-GAN3R2-BSC半橋評估板
- 4.52MB | 1次下載 | 免費(fèi)
- 6AC6951C功放30W彩燈電路
- 0.19 MB | 1次下載 | 2 積分
- 7PNE20080EPE超快恢復(fù)整流器規(guī)格書
- 275.29KB | 1次下載 | 免費(fèi)
- 8RS-485收發(fā)器CMT83086的高可靠性全雙工隔離特性及其應(yīng)用
- 888.28 KB | 1次下載 | 免費(fèi)
本月
- 1DeepSeek:從入門到精通
- 5.36 MB | 59次下載 | 1 積分
- 2OAH0428最新規(guī)格書(中文)
- 2.52 MB | 27次下載 | 10 積分
- 3幾款格力空調(diào)電路圖
- 0.88 MB | 7次下載 | 免費(fèi)
- 4中興通訊的PCB設(shè)計(jì)規(guī)范
- 23.03 MB | 5次下載 | 5 積分
- 5炬芯藍(lán)牙音箱方案規(guī)格
- 4.85 MB | 4次下載 | 免費(fèi)
- 6Altium-常用3D封裝庫(Step)接插件篇
- 4.95 MB | 4次下載 | 免費(fèi)
- 7HBS2268 PWM的電流型開關(guān)電源控制器中文手冊
- 1.47 MB | 4次下載 | 免費(fèi)
- 8PNE20040CPE-Q雙共陰極超快恢復(fù)整流器規(guī)格書
- 275.16KB | 4次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935124次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191370次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81582次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73813次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論