协程框架(libcopp) 小幅优化
author: owent categories:
Article
Blablabla
date: 2019-06-22 12:26:58
draft: false
id: 1907
tags:
tags:
libcopp
stack pool
benchmark
coroutine
goroutine
boost
context
协程
title: 协程框架(libcopp) 小幅优化
type: post
另外一个稍微大一点的变化是针对于任务管理模块的定时器的,原先的定时器是红黑树(std::multimap)存的类似checkpoint的检查点。它其实对修改任务超时时间的操作不是很友好,过期的checkpoint会仍然保存在map中,直到触发checkpoint才会销毁,所以我也没有提供修改任务超时时间的功能。
新的实现可以任意修改超时时间了,所以我就提供了修改超时时间的接口。这种修改超时时间的操作虽然伴随着风险,但是在某些情况下可能会有些作用。我们项目原来有些回滚任务可以简单地延长任务时间来做回滚操作。但是其实更合理地方法是另起一个任务去做回滚,因为如果当前任务已经超时了,再重设超时时间也是无效的。(task_manager会返回 COPP_EC_NOT_FOUND , 因为已经超时被重管理队列里移除了。)
最后一个小优化是 C++11 以上默认使用unordered_map而不是map去存储协程任务了,这对cache友好一些。之前计划的对 C++20 协程的接入暂时还没时间做,后面再说吧。
比较郁闷的是新的API和流程我都加了单元测试,然而覆盖率下降了,( T _ T ), 后面我再补一点吧。
Last updated
Was this helpful?