跳到主要内容

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_count()当前协程池中的协程数量
bool check_co_finish()检测是否还有未完成的