Maison > développement back-end > Problème PHP > utilisation de php pcntl

utilisation de php pcntl

藏色散人
Libérer: 2023-03-09 08:08:02
original
3738 Les gens l'ont consulté

Utilisation de php pcntl : créez d'abord un exemple de fichier PHP ; puis utilisez la série de fonctions PCNTL pour traiter une transaction ; enfin, utilisez un tableau "$pids" pour laisser le processus principal attendre que tous les processus soient terminés. avant de terminer.

utilisation de php pcntl

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3

Utilisation multi-processus Pcntl exemple de PHP

Cet article présente principalement l'utilisation de pcntl multi-processus en PHP. Il analyse les compétences d'utilisation de pcntl pour fonctionner multi-processus avec des exemples. en cas de besoin, vous pouvez vous référer à cet article

L'exemple décrit l'utilisation du multi-processus pcntl de PHP. Partagez-le avec tout le monde pour votre référence. L'analyse spécifique est la suivante :

PHP peut également gérer une transaction avec plusieurs processus en utilisant la série de fonctions PCNTL. Par exemple, je dois obtenir 800 000 données de la base de données, puis effectuer une série de traitements ultérieurs. À ce stade, dois-je utiliser un seul processus ? Vous pouvez attendre jusqu'à aujourd'hui l'année prochaine. Vous devez donc utiliser la fonction pcntl.

Supposons que je veuille démarrer 20 processus et diviser 1 à 80 w de données en 20 parties. Le processus principal attend que tous les processus enfants soient terminés avant de quitter :

$max = 800000;
$workers = 20;
$pids = array();
for($i = 0; $i < $workers; $i++){
  $pids[$i] = pcntl_fork();
  switch ($pids[$i]) {
    case -1:
      echo "fork error : {$i} \r\n";
      exit;
    case 0:
      $param = array(
        &#39;lastid&#39; => $max / $workers * $i,
        &#39;maxid&#39; => $max / $workers * ($i+1),
      );
      $this->executeWorker($input, $output, $param);
      exit;
    default:
      break;
  }
}
foreach ($pids as $i => $pid) {
  if($pid) {
    pcntl_waitpid($pid, $status);
  }
}
Copier après la connexion

Ici, quand pcntl_fork sort In. à l'avenir, une valeur pid sera renvoyée. Ce pid est 0 dans le processus enfant, et est le pid du processus enfant (>0) dans le processus parent. Si le pid est -1, cela signifie que le fork s'est mal passé. .

L'utilisation d'un tableau $pids permet au processus principal d'attendre que tous les processus soient terminés avant de le terminer

[Apprentissage recommandé : Tutoriel vidéo PHP]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal