web-dev-qa-db-ja.com

サーバーは同時シェルコマンドを処理できますか?

私は MPPHP のプレーヤーベースの非常にシンプルなブラウザを書いています。このプロジェクトの一部では、すべてのMP3ファイルを WAV ファイルに変換する必要があります。 PHPにはShell_execという関数があり、シェルを介してコマンドを実行できます。私のプロジェクトでは、誰かが自分のアカウントに曲をアップロードするたびに、次のコマンドが実行されます。

Shell_exec('ffmpeg -i inputSong.mp3 outputSong.wav')

だから、同じ時間に曲をアップロードするfinishが10人いるとしましょう。 Linuxサーバーは10個のシェルコマンドを同時に実行しますか、それとも一度に1つだけ実行しますか?

サーバーが複数のシェルコマンドを同時に処理できる場合、サーバーは同時に10の異なる曲の変換を処理できますか?

11
user784637

PHP(またはシェルコマンドにアクセスできる他の言語)を介して実行する場合、それらは個別に実行されます。つまり、10人のユーザーがPHPスクリプト。 PHPを介した各Shell_exec呼び出しは、他から独立して行われます。私自身は、特定の画像についてユーザーに情報を表示するShell_execスクリプトを持っています。これは、Shell_execを介して実行される他のPHPスクリプトから独立して行われます。

PHPが同時に処理できるユーザーの数には制限がありますが、使用している場合は、Webサーバー、PHP構成ファイル、およびMySQLに依存します。同時に100を超える数を知っています。

CPUを集中的に使用するコマンド(ビデオの変換など)を使用する場合、コマンドの効果的な使用方法は、RAMの量とCPUの能力に依存します。 64 MB RAMと 80486 を持っている人にとっては、2つのビデオと10曲を変換しようとすると悪くなります。それはシステムに過負荷をかけます。 Core 2 Duoサーバーと4GBのRAMをお持ちの場合、いくつかの曲を変換するのは簡単だと思います。

基本的に、はい、Linuxは特にPHPからの複数のシェルコマンドを同時に処理できますが、全体的なパフォーマンスはサーバーのリソース(CPU、RAM、ハードディスクドライブなど)に依存します

13
Luis Alvarado

多数のユーザーをサポートする場合は、変換プロセスを処理する代替方法を調査する必要があります。

たとえば、ファイルを変換し、完了ステータスについてシステムをポーリングする要求をシステムに送信するように、ジョブスケジューリングシステムをセットアップします。スケジューリングシステムは、キューからタスクを取得し、一度に最大4つのファイル変換を実行します。

この質問は興味深いかもしれません:

https://stackoverflow.com/q/265073/175849

6
Steve-o