C++ 基础库 CO 1.1 发布
C++ 基础库 co 1.1 发布。CO 是一个优雅、高效的 C++ 基础库,支持 Linux, Windows 与 Mac 平台。
CO 追求极简、高效,不依赖于 boost 等三方库,仅使用了少量 C++11 特性。
Changes
代码结构调整
- 头文件放到 include 目录.
- 源文件放到 src 目录.
rpcgen
更名为gen
.- 移除
unitest/base
目录,单元测试代码直接放到unitest
目录下. test
目录下支持子目录.
fast
fast.cc
中静态变量的定义放到函数中,初始化更安全.fast::dtoa
弃用基于LruMap
的实现,换用 Milo Yip 的实现(miloyip/dtoa-benchmark).- 新增
fast::stream
类,提供基本的流式输出操作.
fastream
- 继承于
fast::stream
类. - 支持 move 构造函数.
- 增加空状态.
fastream fs; // 定义一个空的 fastream 对象,不分配内存
- 支持 append 自己.
fastream fs; fs << "hello " << 23; fs.append(fs); fs << fs; // <==> fs.append(fs)
fastring
- 与
fastream
一样,继承于fast::stream
类,因此也支持流式输出操作.fastring s; s << "hello " << 23;
- fastring 与 fastream 的内存结构相同,二者可以无缝转换.
fastring s; fastream& fs = *(fastream*)&s
- 移除引用计数,使 fastring 的复制行为与
std::string
类似,使用起来不容易出错.fastring s("hello"); fastring t(s); // 通过内存拷贝创建一个新的字符串
append
操作增加inside
检查,修复内存重叠时的逻辑漏洞.fastring s("123"); s.append(s.c_str() + 1); // s -> "12323"
- 删除
clone()
方法,移除引用计数后,此方法多余.
str
str::dbg()
支持std::unordered_map
与std::unordered_set
.
flag
- 优化命令行参数与配置文件的解析顺序,先解析配置文件,再解析其他命令行参数.
# 先解析配置文件 xx.conf,再解析其他命令行参数 # 命令行中 x, s 的值会覆盖 xx.conf 中的值,方便调试 ./xx -x -s="hello" -config=xx.conf
- Linux 平台增加内置 bool flag
daemon
,以支持后台运行程序# 可在命令行参数中带上 -daemon # 也可在配置文件中设置: daemon = true ./xx -daemon
- 命令行参数支持多种格式,
-x=y
可以写成-x y
或者x=y
./xx -i=8 u=88 -s="hello world" ./xx -i 8 -u 88 -s "hello world"
- 优化程序启动时指定配置文件的方式.
./xx config=xx.conf # 用 flag config 显示指定 ./xx xx.conf # 配置文件名以 .conf 或 config 结尾,且是程序命令行的第一个非 flag 参数,则可省略 config= ./xx -x xx.conf # -x 是 flag,xx.conf 是第一个非 flag 参数
- 定义 flag 时,可以在注释中指定级别,以控制 flag 在配置文件中的顺序.
// 在注释开头用 #3 指定级别为 3 // 支持的级别为 0-99,默认为 10 // 使用 --mkconf 自动生成配置文件时,flag 按级别、文件名、代码行数排序 DEF_bool(b, false, "#3 xxx");
log
- signal handler 中部分函数修改为
async-signal-safe
版本的函数,更安全.
协程库
- 修复未及时移除 epoll(kevent, iocp) 中注册的 io 事件引起的 bug.
- 修复 Scheduler 在 add_timer() 时,内部 iterator 未正确更新的 bug.
- 改进
co::connect
,co::accept
等的实现,以支持 ipv6. - 新增
co::max_sched_num()
接口,获取支持的最大调度线程数,目前为系统 cpu 核数. - 新增
co::sched_id()
接口,获取当前的调度线程 id. - 新增
coroutine_id()
接口,获取当前协程的 id. - 重构 Scheduler,内部逻辑结构更清晰,同时提高代码的可读性.
- 修改
co::tcp_socket()
,co::udp_socket()
接口的参数为 address family,弃用早期用 4 与 6 指定 ipv4 与 ipv6 的方式.sock_t tcp_socket(int af=AF_INET); // @af: address family, AF_INET, AF_INET6, etc. sock_t udp_socket(int af=AF_INET); // @af: address family, AF_INET, AF_INET6, etc.
- 新增
co::socket()
接口,与原生 api 保持一致. - 修复 hook 实现中一些静态全局变量的初始化问题.
- 优化
co::Event
的内部实现. - 重构
co::Pool
:- 用户可以指定 callback
ccb
与dcb
,分别用于创建、销毁元素. - 用户可以指定 pool 的最大容量(仅在 dcb 设置时有效).
- 内部实现中向 Scheduler 注册 cleanup callback,保证在调度线程结束时进行 co::Pool 的清理工作.
- 用户可以指定 callback
co::Kakalot
重命名为co::PoolGuard
.
json
- 内部引用计数,使用原子操作,复制 Json 对象更安全.
- 重构 Json 内部的内存模型,修复之前因内部内存变化引起的 bug.
- 内部增加简单的内存分配器
Jalloc
,提升 Json 的性能. json::parse()
支持数组对象的解析.Json v = json::parse("[1, 2, 3]");
- 新增
Json::dbg()
接口,将 Json 对象转换为 debug string (Json 对象中较长的字符串可能被截断). - log 库调用
Json::dbg()
输出 Json 对象,使得输出的日志更精简.
rpc
- 简化,移除一些不必要的配置项.
- 优化连接管理,可以通过
rpc_conn_idle_sec
与rpc_max_idle_conn
指定空闲连接的超时时间、最大的空闲连接数.
hash
- 修改
hash32()
的实现,32 位系统使用 murmur 2 的 32 位版本,64 位系统直接取hash64
的低 32 位.
编译

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava)发布的《spring cloud系列》教程的总第十篇: 本文是几个维度中的第一个维度:注册与发现维度配置中心管理之Eureka相关教程第七篇-Spring cloud整合Eureka总结篇。 一:spring cloud整合Eureka总结 我们来回顾下到目前为止我们所学的知识: 我们先学习了微服务架构的入门知识: 微服务的介绍;spring cloud是什么?简单一句话:spring cloud是分布式微服务一站式解决方案。里面集成了很多优秀的项目,让我们从以下几个维度很好的来管理、治理我们的微服务; 接着我们介绍了分布式体系常见的几个维度: 服务注册与发现;服务调用;服务熔断;负载均衡;服务降级一级服务消息队列。这几个维度来治理的。如下图: 接着我们介绍了在2020年升级之后,每个维度使用的技术。如下图: 具体详见《spring cloud系列教程第一篇-介绍》在这篇文章中凯哥做了详...
- 下一篇
Hutool 5.3.9 发布,目标无 issue 遗留
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; Hutool是项目中“util”包友好的替代,它节省了我们对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。 ------------------------------------------------------------------------------------------------------------------- 好久不发新闻了,Hutool依旧在快速迭代,力争issue和pr双清。 PS:Hutool的完善和进步离不开大家的献言献策和pr贡献,但是我们不可能面面俱到,用户提的问题也不可能全部解决,未能解决的问题主要以下几个方面: 1、用户提的issue简单一句,无法理解或者复现问题,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7安装Docker,走上虚拟化容器引擎之路