CO C++ 基础库开源项目

我要开发同款
匿名用户2020年07月12日
148阅读

技术信息

开源地址
https://github.com/idealvin/co
授权协议
MIT

作品详情

BasicCO 是一个优雅、高效的C++基础库,支持Liux,Widows与Mac平台。CO 追求极简、高效,不依赖于 boost 等三方库。

CO 包含协程库(golag-style)、网络库(tcp/http/rpc)、日志库、命令行与配置文件解析库、单元测试框架、jso库等基本组件。

参考文档中文Eglish亮点功能

co

co 是一个 golag 风格的C++协程库,有如下特性:

支持多线程调度,默认线程数为系统CPU核数.

协程共享线程栈(默认大小为1MB),内存占用极低,单机可轻松创建数百万协程.

支持系统apihook(Liux&Mac).

支持协程锁 co::Mutex.

支持协程同步事件 co::Evet.

支持协程池 co::Pool.

用 go() 创建协程:

voidfu(){std::cout<<"helloworld"<<std::edl;}go(fu);

so

so 是基于协程的C++网络库,可轻松实现同时支持 ipv4 与 ipv6 的网络程序,包含如下几个模块:

tcp模块,支持一般的tcp编程.

http模块,支持基本的http编程.

rpc模块,基于jso的rpc框架,单线程qps可达到12w+.

实现静态 webserver:

#iclude"co/flag.h"#iclude"co/log.h"#iclude"co/so.h"DEF_strig(d,".","rootdir");//指定webserver根目录itmai(itargc,char**argv){flag::iit(argc,argv);log::iit();so::easy(FLG_d.c_str());//mumeverhavetoworryagairetur0;}实现一般的httpserver:http::Serverserv("0.0.0.0",80);serv.o_req([](costhttp::Req&req,http::Res&res){if(req.is_method_get()){if(req.url()=="/hello"){res.set_status(200);res.set_body("helloworld");}else{res.set_status(404);}}else{res.set_status(501);}});serv.start();

log

log 是一个超级快的本地日志系统,打印日志比 pritf 更安全:

LOG<<"hello"<<23;//ifoELOG<<"helloagai";//error

下面直观感受一下 log 的性能:

logvsgloggoogleglogco/logwi2012HHD1.6MB/s180MB/swi10SSD3.7MB/s560MB/smacSSD17MB/s450MB/sliuxSSD54MB/s1023MB/s

上表是单线程连续打印100万条ifo日志(每条50字节左右)的测试结果,co/log 几乎快了 glog 两个数量级。

为何如此快?一是log库内部基于比 spritf 快8-25倍的 fastream 实现,二是log库几乎没有什么内存分配操作。

flag

flag 是一个方便、易用的命令行及配置文件解析库,支持自动生成配置文件。

#iclude"co/flag.h"DEF_it32(i,32,"commets");DEF_strig(s,"xxx","strigtype");itmai(itargc,char**argv){flag::iit(argc,argv);std::cout<<"i:"<<FLG_i<<std::edl;std::cout<<"s:"<<FLG_s<<std::edl;retur0;}

编译后运行:

./xx#以默认参数启动./xx-i=4k-s="helloworld"#整数类型可以带单位k,m,g,t,p,不分大小写./xx-i4k-s"helloworld"#与上等价./xx--mkcof#自动生成配置文件xx.cof./xx-cofig=xx.cof#从配置文件启动

jso

jso 是一个速度堪比 rapidjso 的jso库,如果使用 jemalloc,parse 与 strigify 的性能会进一步提升。此库对jso标准的支持不如rapidjso全面,但能满足程序员的基本需求,且更容易使用。

代码构成

co/iclude

libco 的头文件。

co/src

libco 的源代码。

co/test

一些测试代码,每个 .cc 文件都会编译成一个单独的测试程序。

co/uitest

一些单元测试代码,每个 .cc 文件对应不同的测试单元,所有代码都会编译到单个测试程序中。

co/ge

代码生成工具,根据proto文件,自动生成rpc框架代码。

编译执行xmakeCO 推荐使用 xmake 进行编译。

编译器

Liux: gcc4.8+Mac: clag3.3+Widows: vs2015+

安装xmake

widows,mac与debia/ubutu可以直接去xmake的 release 页面下载安装包,其他系统请参考xmake的 Istallatio 说明。

xmake在liux上默认禁止root用户编译,ruki 说不安全,可以在 ~/.bashrc 中加上下面的一行,启用root编译:

exportXMAKE_ROOT=y

快速上手

#所有命令都在co根目录执行,后面不再说明xmake#默认编译libco与gexmake-a#编译所有项目(libco,ge,co/test,co/uitest)

编译libco

xmakebuildlibco#编译libcoxmake-blibco#与上同

编译及运行uitest代码

co/uitest 是单元测试代码,用于检验libco库功能的正确性。

xmakebuilduitest#build可以简写为-bxmakeruuitest-a#执行所有单元测试xmakeruitest-a#同上xmakeruitest-os#执行单元测试osxmakeruitest-jso#执行单元测试jso

编译及运行test代码

co/test 包含了一些测试代码。co/test目录下增加 xxx.cc 源文件,然后在co根目录下执行 xmakebuildxxx 即可构建。

xmakebuildflag#编译flag.ccxmakebuildlog#编译log.ccxmakebuildjso#编译jso.ccxmakebuildrapidjso#编译rapidjso.ccxmakebuildrpc#编译rpc.ccxmakebuildeasy#编译so/easy.ccxmakebuildpigpog#编译so/pigpog.ccxmakerflag-xz#测试flag库xmakerlog#测试log库xmakerlog-cout#终端也打印日志xmakerlog-perf#log库性能测试xmakerjso#测试jsoxmakerrapidjso#测试rapidjsoxmakerrpc#启动rpcserverxmakerrpc-c#启动rpcclietxmakereasy-dxxx#启动webserverxmakerpigpog#pigpogserver:127.0.0.1:9988xmakerpigpogip=::#pigpogserver::::9988(ipv6)xmakerpigpog-cip=::1#pigpogcliet->::1:9988

编译ge

#建议将ge放到系统目录下(如/usr/local/bi/).xmakebuildgegehello_world.proto

proto 文件格式可以参考 hello_world.proto。

安装

#默认安装头文件、libco、gexmakeistall-opkg#打包安装到pkg目录xmakei-opkg#同上xmakeistall-o/usr/local#安装到/usr/local目录cmakeizhegfa 帮忙提供了cmake支持:

默认只编译 libco 与 ge.编译生成的库文件在build/lib目录下,可执行文件在build/bi目录下.可以用 BUILD_ALL 指定编译所有项目.可以用 CMAKE_INSTALL_PREFIX 指定安装目录.mkdirbuild&&cdbuildcmake..cmake..-DBUILD_ALL=ON-DCMAKE_INSTALL_PREFIX=pkgmake-j8makeistallLiceseCO 以 MIT Licese发布. CO 包含了一些其他项目的代码,可能使用了与 CO 不同的Licese,详情见 LICENSE.md。

特别致谢co/cotext 的相关代码取自 ruki 的 tbox,特别表示感谢!co英文参考文档,由 Leedehai(1-10),daidai21(11-15)与 google 翻译,特别表示感谢!ruki 帮忙改进了xmake编译脚本,特别表示感谢!izhegfa 提供了cmake编译脚本,特别表示感谢!

功能介绍

Basic CO 是一个优雅、高效的 C++ 基础库,支持 Linux, Windows 与 Mac 平台。CO 追求极简、高效,不依赖于 boost 等三方库。 CO 包含协程库(golang...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论