copool
简介
gs线程池功能, 提供函数级别的并行处理
信息
提供协程池的功能,设计理念完全不同于CoroutineD
compare with CoroutineD: 1.CoroutineD的服务与协程组是一一对应的关系,这里所有服务共享同一个池。 2.CoroutineD的协程组增减协程是显示的,这里将隐式地完成调整。 3.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_co_count() | 当前协程池中的协程数量 |
bool co_pool_check_task_finish() | 检测是否所有负载都处理完成 |
int co_pool_get_task_count() | 获取未处理完成的负载数量 |
bool co_pool_wait_task_finish(mixed wait_time = -1) | 等待所有负载处理完成 |