问题描述
我正在研究Laravel项目。我正在使用作业队列执行某些功能。我使用主管来运行作业侦听命令。但是我对这个概念不太了解。这是我的问题。
- 我有8名工人。他们如何参与工作队列系统?
- 如果我增加他们的数量,工作处理速度会更快吗?
- 只要增加它们,是否还会占用更多RAM?如果我的服务器有16GB的内存,我可以有多少个工人?
- 工作要排队吗? (下图)
解决方法
-
我有8个工人。他们如何参与工作队列系统?
Worker可以简单地作为可以同时处理作业的处理器/用户。 8个工人意味着一次可以处理8个过程/功能。
-
如果我增加他们的数量,工作处理速度会更快吗?
也许是,但也许没有。取决于您的进程和服务器资源,例如RAM / CPU /磁盘速度。如果正在运行的工作人员消耗大量资源,则可能会使服务器冻结/变慢,但是如果每个工作人员的资源消耗都较低,则可能会使队列速度更快。
-
只要增加它们,是否还会占用更多RAM?如果我的服务器有16GB的内存,我可以有多少工人?
是的,取决于每个进程有多少可用RAM和消耗多少RAM。如果可用RAM为10gb,并且平均进程消耗100mb RAM,那么最大工作进程应该为100。也许您仍然可以增加它,但这会影响其他工作进程。 CPU和磁盘使用率也是重要因素。
-
工作进入queque吗? (下图)
抱歉,我对您的图像不完全了解。但是,如果您有8个工人,则队列应该只有2个。
-
能否请您解释一下作业和队列之间的区别? Job是包含通常创建到
App\Jobs
文件夹的函数/过程的类。可以多次排队或调度/执行作业。队列是有空闲工作人员时需要执行的作业列表。如果您将作业分派到队列中,它将转到pending queue
,如果您有空闲工作人员,该作业将被执行或转到running queue
。作业执行/完成后,将从队列列表中删除该作业。