Czy serwer może obsługiwać jednoczesne polecenia powłoki?

11

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?

użytkownik784637
źródło
W jaki sposób jest związane z tym Ubuntu? Czy to nie należy do błędu serwera lub uniksa?
maska ​​bitowa
5
Zachowaj ostrożność, przyjmując wejściową nazwę pliku od użytkownika. Ktoś może specjalnie stworzyć nazwę pliku, która naśladuje jakieś polecenie i którą wykonasz, i będziesz w zasadzie zhakowany.
Rory,

Odpowiedzi:

13

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_execzostanie wykonane niezależnie od innych. Ja sam mam shell_execskrypt, 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 PHP shell_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.)

Luis Alvarado
źródło
6

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

Steve-o
źródło
Kolejna świetna odpowiedź, dziękuję steve-o
user784637,