Swoole协程工作池,它可以限定你的同时工作协程数量,并且减少协程频繁创建销毁的损耗。
原理事先定好协程数量和工作队列长度,将所有工作协程事先创建好。
使用 Swoole\Coroutine\Channel 实现工作队列。
在每个工作协程中,Swoole\Coroutine\Channel->pop()。一旦有新的任务 push 进队列,就会有一个工作协程被唤醒。
安装在您的composer.json中加入配置:
{"require":{"yurunsoft/swoole-co-pool":"~1.0"}}然后执行composerupdate命令。
使用useYurun\Swoole\CoPool\CoPool;useYurun\Swoole\CoPool\Interfaces\ICoTask;useYurun\Swoole\CoPool\Interfaces\ITaskParam;$coCount=10;//同时工作协程数$queueLength=1024;//队列长度$pool=newCoPool($coCount,$queueLength,//定义任务匿名类,当然你也可以定义成普通类,传入完整类名newclassimplementsICoTask{/***执行任务**@paramITaskParam$param*@returnmixed*/publicfunctionrun(ITaskParam$param){//执行任务returntrue;//返回任务执行结果,非必须}});$data=1;//可以传递任何参数//增加任务,并挂起协程等待返回任务执行结果$result=$pool->addTask($data);//增加任务,异步回调$result=$pool->addTask($data,function(ITaskParam$param,$data){//异步回调});代码示例详见 test/test.php
评论