Estou escrevendo um simples MP3 player baseado em navegador em PHP . Parte deste projeto requer que todos os arquivos MP3 sejam convertidos em um arquivo WAV . Existe uma função no PHP chamada shell_exec
que permite executar um comando via shell. Para o meu projeto, sempre que alguém carrega uma música em sua conta, o seguinte comando é executado:
shell_exec('ffmpeg -i inputSong.mp3 outputSong.wav')
Então, digamos que há 10 pessoas diferentes que terminam de enviar uma música ao mesmo tempo. O servidor Linux executa 10 comandos de shell simultaneamente ou apenas um de cada vez?
Se um servidor puder manipular vários comandos do shell simultaneamente, o servidor poderá gerenciar a conversão de 10 músicas diferentes ao mesmo tempo ou será que apenas uma de cada vez?
command-line
php
ffmpeg
user784637
fonte
fonte
Respostas:
Se você estiver fazendo isso via PHP (ou qualquer outra linguagem que tenha acesso aos comandos do shell), eles serão feitos separadamente, o que significa que serão feitos simultaneamente se, por acaso, os 10 usuários usarem o script PHP ao mesmo tempo. Cada chamada do PHP
shell_exec
será feita independentemente das outras. Eu mesmo tenho umshell_exec
script que mostra algumas informações aos meus usuários para determinadas imagens e isso é feito independentemente de outros scripts executados pelo PHPshell_exec
.Há um limite para quantos usuários simultâneos o PHP pode manipular, mas isso depende do servidor da web, do arquivo de configuração do PHP e do MySQL, se você o estiver usando. Eu sei que o número é maior que 100 ao mesmo tempo.
Ao usar comandos intensivos da CPU, por exemplo, converter vídeos, o uso efetivo dos comandos dependerá da quantidade de RAM que você possui e da quantidade de energia da CPU. Para alguém com 64 MB de RAM e 80486 , seria ruim tentar converter dois vídeos e 10 músicas. Isso sobrecarregaria o sistema. Para alguém com um servidor Core 2 Duo e 4 GB de RAM, acho que converter várias músicas seria um pedaço de bolo.
Então, basicamente, sim, o Linux pode lidar com vários comandos de shell simultâneos, especialmente do PHP, mas o desempenho geral dependeria dos recursos do servidor (CPU, RAM, unidade de disco rígido etc.)
fonte
Se você fosse dar suporte a um grande número de usuários, teria que investigar um método alternativo de lidar com o processo de conversão.
Por exemplo, você provavelmente configuraria um sistema de agendamento de tarefas, de forma a publicar solicitações no sistema para converter um arquivo e pesquisar o status de conclusão do sistema. O sistema de agendamento retira tarefas de uma fila e, por exemplo, realiza até quatro conversões de arquivos por vez.
Esta pergunta pode ser do seu interesse:
/programming//q/265073/175849
fonte