Piszę w PHP bardzo prosty odtwarzacz MP3 oparty na przeglądarce . Część tego projektu wymaga przekonwertowania każdego pliku MP3 na plik WAV . W PHP jest funkcja o nazwie, która pozwala wykonać polecenie przez powłokę. W moim projekcie za każdym razem, gdy ktoś załaduje utwór na swoje konto, zostanie wykonane następujące polecenie:shell_exec
shell_exec('ffmpeg -i inputSong.mp3 outputSong.wav')
Powiedzmy, że istnieje 10 różnych osób, które kończą przesyłanie utworu w tym samym czasie. Czy serwer Linux wykonuje jednocześnie 10 poleceń powłoki, czy może wykonuje tylko jedno polecenie naraz?
Jeśli serwer może obsługiwać wiele poleceń powłoki jednocześnie, czy byłby w stanie obsłużyć konwersję 10 różnych utworów jednocześnie, czy też robi to tylko jedną naraz?
command-line
php
ffmpeg
użytkownik784637
źródło
źródło
Odpowiedzi:
Jeśli robisz to za pośrednictwem PHP (lub innego języka, który ma dostęp do poleceń powłoki), będą one wykonane osobno, co oznacza, że zostaną one wykonane jednocześnie, jeśli przypadkiem 10 użytkowników jednocześnie użyje skryptu PHP. Każde wywołanie PHP
shell_exec
zostanie wykonane niezależnie od innych. Ja sam mamshell_exec
skrypt, który pokazuje moim użytkownikom pewne informacje na temat niektórych obrazów i odbywa się to niezależnie od innych skryptów wykonywanych przez PHPshell_exec
.Istnieje ograniczenie liczby jednoczesnych użytkowników, z którymi PHP może sobie poradzić, ale to zależy od twojego serwera WWW, pliku konfiguracyjnego PHP i MySQL, jeśli go używasz. Wiem, że liczba jest większa niż 100 jednocześnie.
Podczas korzystania z poleceń intensywnie wykorzystujących procesor, na przykład do konwersji wideo, efektywne użycie poleceń zależy od ilości pamięci RAM i mocy procesora. Dla kogoś, kto ma 64 MB pamięci RAM i 80486 , źle byłoby spróbować przekonwertować dwa filmy i 10 utworów. To przeciążałoby system. Dla kogoś z serwerem Core 2 Duo i 4 GB RAM myślę, że konwersja kilku utworów byłaby bułką z masłem.
Zasadniczo tak, Linux może obsługiwać wiele jednoczesnych poleceń powłoki, szczególnie z PHP, ale ogólna wydajność zależy od zasobów serwera (procesor, pamięć RAM, dysk twardy itp.)
źródło
Aby obsługiwać dużą liczbę użytkowników, należy zbadać alternatywną metodę obsługi procesu konwersji.
Na przykład prawdopodobnie skonfigurowałbyś system planowania zadań w taki sposób, aby wysyłać żądania do systemu w celu konwersji pliku i odpytania systemu o status ukończenia. System planowania pobierałby zadania z kolejki i mówił, że wykonuje do czterech konwersji plików jednocześnie.
To pytanie może być interesujące:
/programming//q/265073/175849
źródło