資料介紹
軟件簡介
Basic
CO
?是一個優雅、高效的 C++ 基礎庫,支持 Linux, Windows 與 Mac 平臺。CO
?追求極簡、高效,不依賴于?boost?等三方庫。
CO
?包含協程庫(golang-style)、網絡庫(tcp/http/rpc)、日志庫、命令行與配置文件解析庫、單元測試框架、json 庫等基本組件。
參考文檔
亮點功能
-
co
?是一個?golang?風格的 C++ 協程庫,有如下特性:-
支持多線程調度,默認線程數為系統 CPU 核數.
-
協程共享線程棧(默認大小為 1MB),內存占用極低,單機可輕松創建數百萬協程.
-
支持系統 api hook (Linux & Mac).
-
支持協程同步事件?co::Event.
-
支持協程池?co::Pool.
-
用?
go()
?創建協程:
void fun() { std::cout << "hello world" << std::endl; } go(fun);
-
-
so
?是基于協程的 C++ 網絡庫,可輕松實現同時支持?ipv4
?與?ipv6
?的網絡程序,包含如下幾個模塊:-
tcp 模塊, 支持一般的 tcp 編程.
-
http 模塊, 支持基本的 http 編程.
-
rpc 模塊,基于 json 的 rpc 框架,單線程 qps 可達到 12w+.
-
實現靜態?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; }
- 實現一般的 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
?是一個超級快的本地日志系統,打印日志比?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 上表是單線程連續打印 100 萬條 info 日志(每條 50 字節左右)的測試結果,co/log?幾乎快了?glog?兩個數量級。
為何如此快?一是 log 庫內部基于比?
sprintf
?快 8-25 倍的?fastream?實現,二是 log 庫幾乎沒有什么內存分配操作。 -
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 # 以默認參數啟動 ./xx -i=4k -s="hello world" # 整數類型可以帶單位 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 標準的支持不如 rapidjson 全面,但能滿足程序員的基本需求,且更容易使用。
代碼構成
-
libco
?的頭文件。 -
libco
?的源代碼。 -
一些測試代碼,每個?
.cc
?文件都會編譯成一個單獨的測試程序。 -
一些單元測試代碼,每個?
.cc
?文件對應不同的測試單元,所有代碼都會編譯到單個測試程序中。 -
代碼生成工具,根據 proto 文件,自動生成 rpc 框架代碼。
編譯執行
xmake
-
編譯器
- Linux:?gcc 4.8+
- Mac:?clang 3.3+
- Windows:?vs2015+
-
安裝 xmake
windows, mac 與 debian/ubuntu 可以直接去 xmake 的?release?頁面下載安裝包,其他系統請參考 xmake 的?Installation?說明。
xmake 在 linux 上默認禁止 root 用戶編譯,ruki?說不安全,可以在?
~/.bashrc
?中加上下面的一行,啟用 root 編譯:export XMAKE_ROOT=y
-
快速上手
# 所有命令都在 co 根目錄執行,后面不再說明 xmake # 默認編譯 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 # 執行所有單元測試 xmake r unitest -a # 同上 xmake r unitest -os # 執行單元測試 os xmake r unitest -json # 執行單元測試 json
-
編譯及運行 test 代碼
co/test?包含了一些測試代碼。co/test 目錄下增加?
xxx.cc
?源文件,然后在 co 根目錄下執行?xmake build xxx
?即可構建。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 放到系統目錄下(如 /usr/local/bin/). xmake build gen gen hello_world.proto
proto
?文件格式可以參考?hello_world.proto。 -
安裝
# 默認安裝頭文件、libco、gen xmake install -o pkg # 打包安裝到 pkg 目錄 xmake i -o pkg # 同上 xmake install -o /usr/local # 安裝到 /usr/local 目錄
cmake
izhengfan?幫忙提供了 cmake 支持:
-
默認只編譯?
libco
?與?gen
. - 編譯生成的庫文件在 build/lib 目錄下,可執行文件在 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 發布.?CO
?包含了一些其他項目的代碼,可能使用了與?CO
?不同的 License,詳情見?LICENSE.md。
特別致謝
- C和C++實物精選《C專家編程》 0次下載
- C和C++經典著作《C和指針》 0次下載
- C和C++經典著作-C專家編程.PDF 0次下載
- Visual C++和MFC創建的應用程序基礎知識 0次下載
- C++開源庫的詳細資料合集免費下載
- C++的框架、庫和資源資料匯總大全
- C++的開源庫大全詳細資料說明
- C++的框架、庫和代碼分析的資料大全
- C++程序設計教程之C++工具的詳細資料說明 4次下載
- C++程序設計教程之C++的初步知識的詳細資料說明 31次下載
- VISUAL C++教程之VISUAL C++的安裝和使用方法 19次下載
- c280x / c2801x C / C++頭文件和外周 實例快速啟動 7次下載
- C++ primer 0次下載
- The C++ Standard Library 0次下載
- c++標準庫手冊 43次下載
- 使用OpenVINO GenAI API在C++中構建AI應用程序 417次閱讀
- 基于OpenHarmony標準系統的C++公共基礎類庫案例:SafeMap 408次閱讀
- 基于OpenHarmony標準系統的C++公共基礎類庫案例:SafeQueue 340次閱讀
- 基于OpenHarmony標準系統的C++公共基礎類庫案例:SafeStack 361次閱讀
- 基于OpenHarmony標準系統的C++公共基礎類庫案例:SafeBlockQueue 332次閱讀
- OpenHarmony標準系統C++公共基礎類庫案例:HelloWorld 553次閱讀
- C++簡史:C++是如何開始的 637次閱讀
- 使用C++編寫通用庫并在 Rust 中使用它 (WASI) 1133次閱讀
- 如何把C++程序改寫成C語言 3392次閱讀
- C++ STL基本概念是什么 1407次閱讀
- C++語言的發展 617次閱讀
- C++封裝:this指針 3492次閱讀
- 一文讀懂boost庫的概念和安裝方式 8016次閱讀
- 基于STM32F4的 C++封裝(完整代碼) 9696次閱讀
- C++輸入/輸出流 933次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 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十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多