首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
异步服务器协程task大量并发造成mysql连接池不够用
### 问题描述 各位彦祖好, 异步服务器向task投递大量mysql任务时(10万+),task协程并发处理速度太快,造成数据库连接池不够用,有办法限制下速度或其它方式来处理? 已尝试: 1. 提取mysql连接池前强行while sleep等待池空闲。 (大量协程空转) 2.收到task向协程Channel push,pop消费+co::sleep减速. (因协程下的co::sleep,所以使用$serv->getWorkerStatus判断taskWorker状态后投递并不严谨) 3.关闭task_enable_coroutine使用同步task方式 (task下很多协程功能无法使用) ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole版本: 4.7.1 PHP版本: PHP 7.2.34 (cli) (built: Oct 1 2020 13:37:37) ( NTS ) 操作系统版本: CentOS Linux release 7.9.2009 (Core) ### 相关代码 ``` server配置: worker_num = 16 task_worker_num =16 enable_coroutine = true task_enable_coroutine = true 协程配置: Co::set(['hook_flags'=> SWOOLE_HOOK_CURL | SWOOLE_HOOK_TCP]); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 请问是否有办法限制task处理速度或同步队列来处理mysql任务。
发布于4年前 · 22 次浏览 · 来自
提问
jason58
### 问题描述 各位彦祖好, 异步服务器向task投递大量mysql任务时(10万+),task协程并发处理速度太快,造成数据库连接池不够用,有办法限制下速度或其它方式来处理? 已尝试: 1. 提取mysql连接池前强行while sleep等待池空闲。 (大量协程空转) 2.收到task向协程Channel push,pop消费+co::sleep减速. (因协程下的co::sleep,所以使用$serv->getWorkerStatus判断taskWorker状态后投递并不严谨) 3.关闭task_enable_coroutine使用同步task方式 (task下很多协程功能无法使用) ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole版本: 4.7.1 PHP版本: PHP 7.2.34 (cli) (built: Oct 1 2020 13:37:37) ( NTS ) 操作系统版本: CentOS Linux release 7.9.2009 (Core) ### 相关代码 ``` server配置: worker_num = 16 task_worker_num =16 enable_coroutine = true task_enable_coroutine = true 协程配置: Co::set(['hook_flags'=> SWOOLE_HOOK_CURL | SWOOLE_HOOK_TCP]); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 请问是否有办法限制task处理速度或同步队列来处理mysql任务。
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
还没有评论!