惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
博客园 - 聂微东
M
MIT News - Artificial intelligence
博客园_首页
Jina AI
Jina AI
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Vercel News
Vercel News
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
B
Blog
Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

I'm OWenT

国产大模型(GLM 5.1、Kimi K2.6)真实场景效果和 Coding Plan 额度测试 新版本libatapp的连接管理——从etcd服务发现到拓扑驱动的自动重连 新版本libatbus的设计变更——从树形路由到拓扑驱动 Protobuf又一坑 - C++标准和ABI兼容性 AI真好用-给Blog主题统一加mermaid,chart.js,excalidraw,draw.io的多种引入方式支持 给内网部署Squid-通用HTTP下载缓存 UE使用CodeChecker和clang-tidy生成静态分析报告 找出UE的循环依赖 C++小协程栈和临时变量及作用域的栈溢出问题分析 游戏服务的可观测性能力建设(C++生态) 指标上报的多线程优化和多拉取源点优化 协程(libcopp)的Channel功能和CPU命中率优化 通用RPC代码生成器 实现strong_rc_ptr(比shared_ptr更快的引用计数智能指针) 手夯一个STL allocator和对象内存分析组件 std::condition_variable 的信号丢失问题 踩坑一处(GCC)STL std::async 实现BUG导致的crash问题 GCC 14的一个warning to error BUG 给xresloader(Excel导表工具)增强UE读表支持(包含蓝图,Blueprint) Opentelemetry社区在gRPC的几个链接问题(静态库和动态库混用,musl工具链,符号裁剪) Excel转表工具(xresloader)的新验证器(验证外部Excel和文本数据,唯一性和自定义规则) protobuf v22和gRPC v1.55版本升级的依赖变化和upb适配 关于protobuf近期版本(v20/v3.20+)和 gRPC v1.54版本在某些编译环境下的一些链接和编译问题 xresloader-Excel导表工具链的近期变更汇总 打通游戏服务端框架的C++20协程改造的最后一环 Opentelemetry-cpp的Logs模块标准更新(涉及近期版本:1.8-1.9的BREAK CHANGES) 给cmake-toolset和工具链(curl等)加HTTP/2和HTTP/3支持 又开新坑之 coredns 插件: nftables和filter 关于opentelemetry-cpp社区对于C++ Head Only组件单例和符号可见性的讨论小记 填个转表工具 xresloader 去年的坑(数组尾部裁剪)
协程框架(libcopp) 小幅优化
owent · 2019-06-22 · via I'm OWenT

blog-website

最近抽空继续对 libcopp 进行了更新和小幅优化。 首先的Merge了 boost.context 1.70.0 。这次boost.context的更新似乎和它写进 CHANGELOG 里的并不完全一致,匹配的只看到 macho 架构的脏数据操作。 不过另外它增加了新的平台支持 mips64,我目前还是简单导入了,但是平台检测工具还没有写,如果要使用是可以通过编译参数切过去的,不过我感觉没人会这么用吧?我自己用都得看一下之前怎么写的。

boost.context 的其他的变更多是一些平台相关的辅助段,没什么很实际性的作用。这也说明 boost.context 已经趋于非常稳定了。

另外一个稍微大一点的变化是针对于任务管理模块的定时器的,原先的定时器是红黑树(std::multimap)存的类似checkpoint的检查点。它其实对修改任务超时时间的操作不是很友好,过期的checkpoint会仍然保存在map中,直到触发checkpoint才会销毁,所以我也没有提供修改任务超时时间的功能。

现在的实现则是有一点像 LRU 算法的实现,只要任务没有超时,修改超时时间成功的同时会清理掉无效的checkpoint。仍然保留checkpoint的机制是为了多做一次复查,也是一种防御性的编程吧。

新的实现可以任意修改超时时间了,所以我就提供了修改超时时间的接口。这种修改超时时间的操作虽然伴随着风险,但是在某些情况下可能会有些作用。我们项目原来有些回滚任务可以简单地延长任务时间来做回滚操作。但是其实更合理地方法是另起一个任务去做回滚,因为如果当前任务已经超时了,再重设超时时间也是无效的。(task_manager会返回 COPP_EC_NOT_FOUND , 因为已经超时被重管理队列里移除了。)

最后一个小优化是 C++11 以上默认使用unordered_map而不是map去存储协程任务了,这对cache友好一些。之前计划的对 C++20 协程的接入暂时还没时间做,后面再说吧。

新的功能实现我先放到了 v2 分支,暂时还没有合入 master 。因为有一些API上的调整,先在我现在的项目中运行一段时间没问题的话一起作为 1.2.0 版本发布出去和更新vcpkg版本。新版本想直接使用的童鞋也可以直接clone v2 分支。

比较郁闷的是新的API和流程我都加了单元测试,然而覆盖率下降了,( T _ T ), 后面我再补一点吧。