我正在编写一个非常简单的基于浏览器的MP3玩家PHP。该项目的一部分要求将每个 MP3 文件转换为音频文件。PHP 中有一个名为的函数shell_exec
,它允许您通过 shell 执行命令。对于我的项目,每当有人将歌曲上传到他们的帐户时,就会执行以下命令:
shell_exec('ffmpeg -i inputSong.mp3 outputSong.wav')
假设有 10 个不同的人结束在同一时间上传一首歌曲。Linux 服务器是否同时执行 10 个 shell 命令,还是每次只执行一个?
如果一个服务器可以同时处理多个 shell 命令,那么该服务器是否能够同时转换 10 首不同的歌曲,还是每次只能转换一首?
答案1
如果您通过 PHP(或任何其他可以访问 shell 命令的语言)执行此操作,则它们将分别执行,这意味着如果 10 个用户恰好同时使用 PHP 脚本,它们将同时执行。每个 PHP 调用shell_exec
都将独立于其他调用执行。我自己有一个shell_exec
脚本,它向我的用户显示某些图像的一些信息,这是通过 独立于其他 PHP 执行脚本执行的shell_exec
。
PHP 可以同时处理的用户数量是有限制的,但这取决于您的 Web 服务器、PHP 配置文件和 MySQL(如果您正在使用)。我知道同时处理的用户数量大于 100。
当使用 CPU 密集型命令(例如转换视频)时,命令的有效使用将取决于您拥有的 RAM 大小和 CPU 能力。对于拥有 64 MB RAM 和80486尝试转换两个视频和 10 首歌曲会很糟糕。这会使系统超载。对于拥有 Core 2 Duo 服务器和 4 GB RAM 的人来说,我认为转换几首歌曲是小菜一碟。
所以基本上,是的,Linux 可以处理多个同时的 shell 命令,特别是来自 PHP 的命令,但整体性能取决于服务器的资源(CPU、RAM、硬盘驱动器等)。
答案2
如果您要支持大量用户,则必须研究处理转换过程的替代方法。
例如,您可能会设置一个作业调度系统,以便您向系统发布转换文件的请求并轮询系统以了解完成状态。调度系统将从队列中获取任务,并一次执行最多四个文件转换。
这个问题可能会引起你的兴趣: