Estoy escribiendo un reproductor de MP3 basado en navegador muy simple en PHP . Parte de este proyecto requiere que cada archivo MP3 se convierta en un archivo WAV . Hay una función en PHP llamada shell_exec
que le permite ejecutar un comando a través del shell. Para mi proyecto, cada vez que alguien carga una canción en su cuenta, se ejecuta el siguiente comando:
shell_exec('ffmpeg -i inputSong.mp3 outputSong.wav')
Entonces, digamos que hay 10 personas diferentes que terminan de cargar una canción al mismo tiempo exacto. ¿El servidor Linux ejecuta 10 comandos de shell simultáneamente o solo hace uno a la vez?
Si un servidor puede manejar múltiples comandos de shell simultáneamente, ¿sería capaz de manejar la conversión de 10 canciones diferentes al mismo tiempo o solo hace una a la vez?
command-line
php
ffmpeg
usuario784637
fuente
fuente
Respuestas:
Si lo hace a través de PHP (o cualquier otro lenguaje que tenga acceso a comandos de shell), se realizarán por separado, lo que significa que se realizarán simultáneamente si por casualidad los 10 usuarios usan el script PHP al mismo tiempo. Cada llamada a través de PHP
shell_exec
se realizará independientemente de las demás. Yo mismo tengo unshell_exec
script que muestra cierta información a mis usuarios para ciertas imágenes y esto se hace independientemente de otros scripts ejecutados por PHPshell_exec
.Existe un límite para la cantidad de usuarios simultáneos que PHP puede manejar, pero depende de su servidor web, archivo de configuración de PHP y MySQL si lo está utilizando. Sé que el número es mayor que 100 al mismo tiempo.
Cuando se utilizan comandos intensivos de CPU, por ejemplo, la conversión de videos, el uso efectivo de los comandos dependerá de la cantidad de RAM que tenga y la cantidad de energía de CPU que tenga. Para alguien con 64 MB de RAM y un 80486 , sería malo intentar convertir dos videos y 10 canciones. Eso sobrecargaría el sistema. Para alguien con un servidor Core 2 Duo y 4 GB de RAM, creo que convertir varias canciones sería pan comido.
Básicamente, sí, Linux puede manejar múltiples comandos de shell simultáneos, especialmente desde PHP, pero el rendimiento general dependerá de los recursos del servidor (CPU, RAM, disco duro, etc.)
fuente
Si apoyara a un gran número de usuarios, tendría que investigar un método alternativo para manejar el proceso de conversión.
Por ejemplo, es probable que configure un sistema de programación de trabajos de modo que publique solicitudes en el sistema para convertir un archivo y sondear el sistema para el estado de finalización. El sistema de programación tomaría tareas de una cola y, por ejemplo, realizaría hasta cuatro conversiones de archivos a la vez.
Esta pregunta puede ser de interés:
/programming//q/265073/175849
fuente