0

これはPHPの質問というよりもオペレーティングシステムの質問ですが、ここでは関係ありません。

アップロードした動画をさまざまな形式に変換するためffmpegに実行したいと思っています。複数の動画がアップロードされたときにshell_exec()、OSが複数のコマンドをどのように処理するのか疑問に思っています。ffmpeg

これをより明確にするためのサンプルコードを次に示します。

<?php

  $filePath = upload($_FILE['video']); //get filepath from uploaded file

  shell_exec('ffmpeg ' . $filePath . ' video.mp4'); //simple ffmpeg conversion

?>

OSがLinuxベースであると想定します。

  • OSは、上記のコードを使用してメモリがなくなるまで、コマンドごとにスレッドを作成しますか?
  • ある種のキューを作成することがこれらの呼び出しを処理するためのより良い方法であると思いますが、それはシステムが一度に1つのビデオのみを変換することを意味しますか?
  • システムで複数のビデオを並列に変換したい場合はどうなりますか?また、システムが過負荷になる前に処理できる並列スレッドの最大数を知る良い方法は何ですか?

ありがとう。

4

1 に答える 1

1

shell_execPHP は、実行される個々のコマンドごとに個別のプロセスをフォークします。

これらのジョブをキューに入れることをお勧めします。アップロードと ffmpeg ジョブの両方が完了するまで PHP からの応答を遅らせるのではなく、バックグラウンドでそれらを実行します。PHP にはこれを行う組み込みの方法はありませんが、このようなタスクを管理するためのGearmanなどのライブラリが多数あります。

ビデオ変換のような CPU バウンドのジョブの場合、物理的な CPU コアごとに 1 つのプロセスが適切な経験則です。

于 2013-01-16T18:41:27.400 に答える