swoole task会阻塞么
发布时间 - 2019-12-16 00:00:00 点击率:次如果有仔细看过 swoole task 的文档的话,应该都会注意到这句话
task操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。
worker进程将无法接收新的请求 (推荐学习: swoole视频教程)
task 如果阻塞会引发 woker 进程阻塞,造成服务无法工作,引发问题。
我曾经使用 task 发送服务的链路日志,接收日志的服务出现bu
g,造成发送日志的 task 阻塞,然后服务 gg 的情况,之后我就对 task 做了一波优化。
思路就是使用 swoole channel 和 swoole user process 实现一套 task 。
使用 channel 接收数据,然后在 user process 消费数据,假如 channel 满了仅仅会造成 push 数据失败,并不会引发阻塞,因为是链路日志,是允许丢失的,所以这个方案完全没问题。
在swoole user process 消费 channel 的策略的伪代码如下
$sleepTime = 5;
$maxSleepTime = 100;
while (true) {
$task = $chan->pop();
if ($task === false) {
$sleepTime = $sleepTime + 5;
if ($sleepTime > $maxSleepTime) {
$sleepTime = $maxSleepTime;
}
usleep($sleepTime * 1000);
continue;
}
$sleepTime = 0;
// 处理数据
}如果消费到channel的数据,就使用死循环处理数据,因为处理数据过程中是有其他操作的,所以并不会占用大量 cpu。
如果消费不到数据,就 sleep 5ms,sleep的时间依次累加,直到达到最大值 100ms,达到 cpu 使用率和处理数据实时性的一个平衡,具体平衡点可以根据自己的业务按需调整。
# swoole
# 循环
# channel
# bug
# 链路
# 自己的
# 是有
# 这句话
# 注意到
# 满了
# 可以根据
# 就对
# 一波
# 过程中
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
中山网站制作网页,中山新生登记系统登记流程?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
如何快速生成凡客建站的专业级图册?
Laravel如何自定义错误页面(404, 500)?(代码示例)
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
高端云建站费用究竟需要多少预算?
微信小程序 scroll-view组件实现列表页实例代码
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel怎么使用artisan命令缓存配置和视图
如何在阿里云完成域名注册与建站?
如何为不同团队 ID 动态生成多个独立按钮
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Python文件异常处理策略_健壮性说明【指导】
如何用低价快速搭建高质量网站?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
制作旅游网站html,怎样注册旅游网站?
如何在IIS中配置站点IP、端口及主机头?
制作公司内部网站有哪些,内网如何建网站?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Laravel如何优化应用性能?(缓存和优化命令)
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
什么是javascript作用域_全局和局部作用域有什么区别?
使用Dockerfile构建java web环境
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
python中快速进行多个字符替换的方法小结
Python图片处理进阶教程_Pillow滤镜与图像增强
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel如何处理CORS跨域请求?(配置示例)
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
Android仿QQ列表左滑删除操作
非常酷的网站设计制作软件,酷培ai教育官方网站?
JS弹性运动实现方法分析
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Python自动化办公教程_ExcelWordPDF批量处理案例
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】

