У меня есть PHP-скрипт, выполняющий вычисления по набору изображений. Как правило, обработка одного набора изображений занимает 30 секунд.PHP - многопроцессорная обработка медленнее, чем одиночная обработка
Родительский процесс разворачивается один или несколько раз, чтобы выполнять вычисления на разных наборах изображений одновременно. Выполняются вычисления только дочерние процессы.
У меня есть 8 ядер на моей машине Ubuntu, с SSD-диск
Когда я раскошелиться родительский процесс только один раз, так что у меня есть родительский процесс и дочерний процесс, дочерний процесс завершает расчеты по изображение установлено за 30 секунд.
Если я обработаю родительский процесс дважды (так что один родительский и два дочерних процесса), каждый ребенок занимает около 100 секунд для выполнения своей задачи.
Если я обработаю родительский процесс четыре раза (так что один родительский и четыре дочерних процесса), каждый ребенок занимает около 230 секунд для выполнения своей задачи.
while (false !== ($nextTask = $this->selectNextTask()))
{
$pid = pcntl_fork();
if ($pid == -1)
{
//Fork failed
continue;
}
else if ($pid) {
// In parent process
$tasks[$pid] = $nextTask;
$nextTask->initialize($pid);
continue;
}
else
{
$nextTask->run(); //Actual Calculations
exit(0); //end of child process
}
}
//Parent process then waits for all child processes to complete
Фактическая обработка загружает изображения с диска в объекты ImageMagik и обрабатывает эти изображения.
Я что-то упустил?
Есть ли зависимости между вашим разветвленным процессом? я имею в виду ** Процесс А **, ожидающий освобождения ресурса ** процессом 2 ** ?? –
Нет, они полностью независимы – David