登录  /  注册
首页 > php框架 > Swoole > 正文

swoole task会阻塞么

(*-*)浩
发布: 2019-12-16 09:18:31
原创
2473人浏览过

swoole task会阻塞么

如果有仔细看过 swoole task 的文档的话,应该都会注意到这句话

task操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。

worker进程将无法接收新的请求                            (推荐学习: swoole视频教程

task 如果阻塞会引发 woker 进程阻塞,造成服务无法工作,引发问题。

我曾经使用 task 发送服务的链路日志,接收日志的服务出现bug,造成发送日志的 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 task会阻塞么的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学