跳到主要内容

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)等待所有负载处理完成