Рубрики
Uncategorized

Пример анализа блокировки и неблокирования родительского процесса в многопроцессорном программировании PHP

Автор оригинала: David Wong.

В этой статье рассматривается блокировка и неблокирование родительского процесса в многопроцессорном программировании PHP. Подробности заключаются в следующем:

Блокировка процесса PHP, в основном ожидание выхода родительского процесса из дочернего процесса.

1. PHP-код выглядит следующим образом:

php

//Define the number of processes
define('FORK_NUMS', 5);

//Used to save process PID
$pids = array();

//We create five subprocesses
for ($i = 0; $i < FORK_NUMS; ++$i) {
  $pids[$i] = pcntl_fork();
  if ($pids[$i] == -1) {
    die('fork error');
  } else if ($pids[$i]) {
    //This is the parent process space, which is the main process
    //The first time our for loop got here, pcntl_ Wait will suspend the current main process, wait for the first child process to finish executing and exit
    //Note that the code of the for loop is in the main process. Suspending the main process means that the current for loop is blocked here
    //After the first subprocess exits, create the second subprocess, hang up here, wait for the second subprocess to exit, continue to create the third, and so on..
    pcntl_wait($status);
  } else {
    //This is the subprocess space
    Echo "parent process ID:", POSIX_ Getppid (), "process ID":, POSIX_ getpid(), " {$i} \r\n";
    //We let the child process wait for 3 seconds before exiting
    sleep(3);
    exit;
  }
}

Результат приведенного выше кода выглядит следующим образом:

Если мы поместим pcntl_, каков результат ожидания вне цикла for?

2. PHP-код выглядит следующим образом:

Результат приведенного выше кода выглядит следующим образом:

pcntl_ Второй параметр ожидания может использоваться для настройки основного процесса на продолжение выполнения последующего кода, не дожидаясь завершения дочернего процесса.

3. PHP-код выглядит следующим образом:

Результат приведенного выше кода выглядит следующим образом:

Код 3. PHP имеет тот же эффект, что и 2. PHP, pcntl_ Функция wait() используется только для того, чтобы заставить родительский процесс ждать завершения дочернего процесса. По умолчанию основной процесс будет заблокирован.

Для получения дополнительной информации о PHP читатели, интересующиеся этим сайтом, могут ознакомиться со следующими темами: краткое описание навыков работы с процессами и потоками PHP, краткое описание навыков сетевого программирования PHP, вводный курс базового синтаксиса PHP, полная коллекция навыков работы с массивами PHP, краткое описание использования строк PHP “Руководство по работе с базой данных PHP + MySQL” и “Краткое описание навыков работы с общей базой данных PHP”.

Я надеюсь, что эта статья будет полезна для программирования на PHP.