copool
简介
gs线程池功能, 提供函数级别的并行处理 提供协程池的功能,设计理念完全不同于CoroutineD
compare with CoroutineD:
- CoroutineD的服务与协程组是一一对应的关系,这里所有服务共享同一个池。
- CoroutineD的协程组增减协程是显示的,这里将隐式地完成调整。
- CoroutineD由于存在队列,其本身可能造成RPC死锁等问题,这里不会。
优势:
- 安全(本身机制决定了不会因为排队造成死锁,RPC曾经出现过此类问题)。
- 快速(提供更大量的协程待命,理论上排队几率会小于CoroutineD)。
- 好写(co_pool_execute比CoroutineD.dispatch_service短)。
禁忌:
极大量的小任务同时涌入,会造成协程数量的波动,并可能反复触发最坏情况(卡顿半秒)。
此类情形应当使用CoroutineD,创建专用池或者使用匿名池。
注意事项:函数必须是可以并行的, 也就是说函数是 parallel 或者函数所在的对象是parallel
组件接口
copool.gs
函数原型 | 函数作用 |
---|---|
void co_pool_execute(function fn, ...) | 放到协程池中执行函数 |
void co_pool_execute_in(mixed ob_or_domain, function fn, ...) | 放到co池中并绑定到指定域执行 |
int co_pool_get_count() | 当前协程池中的协程数量 |
bool check_co_finish() | 检测是否还有未完成的 |