laravel - Laravel 中的 Job、Queue 和 Worker 有什么区别?
问题描述
我正在做一个 Laravel 项目。我正在使用作业队列来执行某些功能。我使用主管来运行作业监听命令。但我不太理解这个概念。这是我的问题。
解决方案
我有 8 名工人。他们如何参与工作队列系统?
Worker 可以简单地作为可以一次处理工作的处理器/用户。8 个工人意味着一次可以处理 8 个进程/功能。
如果我增加它们的数量,作业处理速度会更快吗?
也许是,但也许不是。取决于您的进程和服务器资源,例如 RAM/CPU/磁盘速度。如果您正在运行的工作人员消耗大量资源,则可能会使服务器冻结/变慢,但如果每个工作人员的资源消耗较低,则可能会使队列速度更快。
只要我增加它们,它也会占用更多的内存吗?如果我的服务器有 16GB 内存,我可以有多少工作人员?
是的,取决于每个进程有多少可用 RAM 和多少 RAM。如果空闲内存 10gb,而平均进程消耗 100mb RAM,那么最大工作数应该是 100。也许你仍然可以增加它,但它会影响其他工作进程。此外,CPU 和磁盘使用率也是重要因素。
工作去queque吗?(下图)
对不起,我不完全了解你的形象。但是如果你有 8 个工人,队列应该只有 2 个。
你能解释一下工作和队列之间的区别吗?Job 是一个包含通常创建到
App\Jobs
文件夹的函数/过程的类。一个作业可以多次排队或分派/执行。队列是当您有空闲工作人员时需要执行的作业列表。如果您将作业分派到队列,它将转到pending queue
,如果您有空闲工人,则作业将被执行或转到running queue
。在作业执行/完成后,该作业将从队列列表中删除。
推荐阅读
- python - 如何在使用 pytest 测试的模块中模拟依赖项的类?
- xcode - 如何将故事板的引用添加到 Kotlin 文件
- c++ - OpenCV reduce() 数组到向量平均值
- python - 叶热图未显示在 Internet Explorer 的 Jupiter 笔记本中
- javascript - 无法在尚未安装的组件上调用 setState
- javascript - AngularJS 内存泄漏,即使在基本代码中
- json - JQ 错误:未定义于
尝试向 jq 模板添加值时 - c# - System.InvalidOperationException(同一类型的另一个实体已经具有相同的主键值
- jquery - Shopify 防止数量输入有负数
- regex - Modrewrite 规则弄乱了变量