Laravel中的Job,Queue和Worker有什么区别?

问题描述

我正在研究Laravel项目。我正在使用作业队列执行某些功能。我使用主管来运行作业侦听命令。但是我对这个概念不太了解。这是我的问题。

  1. 我有8名工人。他们如何参与工作队列系统?
  2. 如果我增加他们的数量,工作处理速度会更快吗?
  3. 只要增加它们,是否还会占用更多RAM?如果我的服务器有16GB的内存,我可以有多少个工人?
  4. 工作要排队吗? (下图)

    Job Queue

解决方法

  1. 我有8个工人。他们如何参与工作队列系统?

    Worker可以简单地作为可以同时处理作业的处理器/用户。 8个工人意味着一次可以处理8个过程/功能。

  2. 如果我增加他们的数量,工作处理速度会更快吗?

    也许是,但也许没有。取决于您的进程和服务器资源,例如RAM / CPU /磁盘速度。如果正在运行的工作人员消耗大量资源,则可能会使服务器冻结/变慢,但是如果每个工作人员的资源消耗都较低,则可能会使队列速度更快。

  3. 只要增加它们,是否还会占用更多RAM?如果我的服务器有16GB的内存,我可以有多少工人?

    是的,取决于每个进程有多少可用RAM和消耗多少RAM。如果可用RAM为10gb,并且平均进程消耗100mb RAM,那么最大工作进程应该为100。也许您仍然可以增加它,但这会影响其他工作进程。 CPU和磁盘使用率也是重要因素。

  4. 工作进入queque吗? (下图)

    抱歉,我对您的图像不完全了解。但是,如果您有8个工人,则队列应该只有2个。

  5. 能否请您解释一下作业和队列之间的区别? Job是包含通常创建到App\Jobs文件夹的函数/过程的类。可以多次排队或调度/执行作业。队列是有空闲工作人员时需要执行的作业列表。如果您将作业分派到队列中,它将转到pending queue,如果您有空闲工作人员,该作业将被执行或转到running queue。作业执行/完成后,将从队列列表中删除该作业。