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

What is difference between Job, Queue, and Worker in Laravel?

我正在做一个 Laravel 项目。我正在使用作业队列来执行某些功能。我使用 supervisor 来执行 运行 工作监听命令。但是我不太了解这个概念。这是我的问题。

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

    工人可以简单地作为一个processor/user可以一次处理工作。 8 个工人意味着一次可以处理 8 个process/function。

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

    也许是,但也许不是。取决于您的进程和服务器资源,例如 RAM/CPU/Disk 速度。如果您的 运行 工作人员消耗高资源,它可以使服务器 freeze/slow,但如果每个工作人员的资源消耗低,它可以使队列更快。

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

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

  4. job去queque? (下图)

    抱歉,我不太了解您的形象。但是如果你有 8 个工人,队列应该只有 2 个。

  5. 你能解释一下作业和队列的区别吗? 作业是 class,其中包含 function/process,通常创建到 App\Jobs 文件夹。一个作业可以排队或 dispatched/executed 多次。队列是当您有空闲工作人员时需要执行的作业列表。如果你派遣一个工作到队列,它会去pending queue,如果你有空闲的工人,这个工作将被执行或去running queue。作业 executed/finished 后,作业将从队列列表中删除。