将 PHP 用于守护进程是否明智?

2022-08-30 19:30:25

我希望创建一个后台进程,我被告知这些通常是用C或类似的东西写的。我最近发现PHP可以用来创建一个守护进程,我希望得到一些建议,如果我应该以这种方式使用PHP。

以下是我对守护进程的要求。

  • 持续检查是否已将行添加到 MySQL 数据库表中
  • 对从数据库中检索到的内容运行 FFmpeg 命令
  • 将输出插入到 MySQL 表中

我不确定我还能提供什么来帮助做出这个决定。补充一点,我以前没有做过C。只有Java和PHP以及基本的bash脚本。

它甚至会产生那么大的性能差异吗?

请允许我的无知,我正在学习!:)

谢谢大家


答案 1

正如其他人所指出的那样,各种版本的PHP都存在垃圾回收器问题。当然,如果您知道您的版本没有此类问题,则可以消除该问题。关键是,在你编写守护进程并通过valgrind运行它以查看已安装的PHP是否在任何给定的机器上泄漏之前,你不知道(肯定)。因此,在這方面,你可能只是為了發現Zend認為已修復的東西可能仍然有錯誤,或者你正在處理一個稍舊的PHP版本或一些擴展。讨厌。

另一个问题是有点错误的信号。根据我的经验,信号处理程序并不总是使用PHP正确输入,特别是当信号排队而不是合并时。这对你来说可能不是问题,也就是说,如果你只需要处理SIGINT/SIGUSR1/SIGUSR2/SIGHUP。

所以,我建议:

如果守护程序很简单,请继续使用PHP。如果它看起来会变得相当复杂,或者分配大量内存,你可以考虑在用PHP进行原型设计后用C语言编写它。

我是一个非常顽固的C人。但是,我认为使用PHP快速敲定一些东西没有错(除了我解释的情况之外)。我也认为使用PHP来原型化一些东西也没有错,这些东西以后可能会或可能不会用C语言重写。例如,如果您使用PHP,处理数据库内容将比使用C中的其他接口管理回调要简单得多。因此,在这种情况下,对于“一次性”,您肯定会更快地完成它。


答案 2

我倾向于使用 cron 作业执行此任务,而不是在守护程序中轮询数据库。

你的FFmpeg命令可能需要一段时间才能完成它的事情,对吧?在这种情况下,真的有必要不断轮询数据库吗?每分钟(或每五分钟,十分钟或二十分钟)运行的cronjob难道不是实现相同目标的更简单方法吗?


推荐