资料介绍
软件简介
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次下载
- 《Visual C++游戏编程基础》电子书.pdf 0次下载
- c280x / c2801x C / C++头文件和外周 实例快速启动 7次下载
- The C++ Standard Library 0次下载
- c++标准库手册 43次下载
- 基于OpenHarmony标准系统的C++公共基础类库案例:SafeMap 130次阅读
- 基于OpenHarmony标准系统的C++公共基础类库案例:SafeQueue 103次阅读
- 基于OpenHarmony标准系统的C++公共基础类库案例:SafeStack 97次阅读
- 基于OpenHarmony标准系统的C++公共基础类库案例:SafeBlockQueue 116次阅读
- OpenHarmony标准系统C++公共基础类库案例:HelloWorld 220次阅读
- C++简史:C++是如何开始的 415次阅读
- 使用C++编写通用库并在 Rust 中使用它 (WASI) 893次阅读
- 如何把C++程序改写成C语言 3150次阅读
- C++ STL基本概念是什么 1222次阅读
- C与C++混合编程是什么 1309次阅读
- C++语言的发展 558次阅读
- C++封装:this指针 3371次阅读
- 一文读懂boost库的概念和安装方式 7333次阅读
- 基于STM32F4的 C++封装(完整代码) 9553次阅读
- C++输入/输出流 876次阅读
下载排行
本周
- 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次下载 | 免费
评论
查看更多