与crontab执行后台任务的方式相比,在php(侦听/处理队列)上编写守护进程是否会耗费大量内存?
我在一台发动机下的一台服务器上有大约600家商店。一些任务店主运行需要很多时间,因此分叉它们是合理的。将任务放入cron很有效,我只是不喜欢最多59秒的延迟启动(限制cron)。所以我想尝试队列系统。我只是害怕它会迫使我运行600个php线程来监听/处理这些队列(商店来自不同的客户,我不能做一个共同的守护进程)。它不会自动需要大约600-1000MB的内存,与cron相比,这不是一个好的选择(如果计划的话只加载一个进程)。
答案 0 :(得分:1)
为什么不使用“at”守护进程运行它们,而不是将它们放入延迟59秒的cron中?你可以简单地使用“现在”,它们会立即运行。例如,见:
http://unixhelp.ed.ac.uk/CGI/man-cgi?at
我当然不会考虑在PHP中同时运行600个线程作为守护进程。
答案 1 :(得分:1)
我之前已经构建了运行多达75-100个单独PHP进程的队列运行程序,使用supervisor启动尽可能多的PHP进程。由于它们共享如此多的公共代码,因此也由操作系统共享,而不是重复。
运行几十个或更多,可能有一些类型的高优先级队列用于小型,快速的工作,以及一部分工作人员可以愉快地运行大而慢的工作。
我在my tech blog, phpscaling.com撰写了这个主题。