从多个不同的请求运行shell_exec时会发生什么?

时间:2013-01-16 18:20:38

标签: php parallel-processing shell-exec

这是一个操作系统问题,而不是PHP问题,但这里无论如何:

我希望通过ffmpeg运行shell_exec(),将上传的视频转换为不同的格式。我想知道在上传多个视频时操作系统如何处理多个ffmpeg命令。

以下是一些示例代码,使其更加明确:

<?php

  $filePath = upload($_FILE['video']); //get filepath from uploaded file

  shell_exec('ffmpeg ' . $filePath . ' video.mp4'); //simple ffmpeg conversion

?>

假设操作系统是基于Linux的。

  • 操作系统是否会为每个命令创建一个线程,直到使用上面的代码耗尽内存?
  • 我假设创建某种队列是处理这些调用的更好方法,但这是否意味着系统一次只能转换一个视频?
  • 如果我希望系统并行转换多个视频怎么办?知道系统在负担过重之前可以处理的并行线程的最大数量有什么好方法呢?

感谢。

1 个答案:

答案 0 :(得分:1)

PHP将为每个执行的shell_exec命令分离一个单独的进程。

将这些工作排队是一个好主意。所以会在后台运行它们,而不是延迟PHP的响应,直到上传和ffmpeg作业都完成。 PHP没有任何内置的方法来执行此操作,但是有许多库,如Gearman,用于管理这样的任务。

对于像视频转换这样的CPU绑定作业,一个好的经验法则是每个物理CPU核心一个进程。

相关问题