Maison >développement back-end >tutoriel php >Comment utiliser PHP pour la conception de programmation simultanée

Comment utiliser PHP pour la conception de programmation simultanée

WBOY
WBOYoriginal
2023-06-06 08:01:341771parcourir

Avec le développement continu de la technologie informatique, comment mieux utiliser la puissance de traitement multicœur des ordinateurs est devenu un sujet brûlant. La programmation simultanée, une méthode de programmation qui gère plusieurs tâches en même temps, devient progressivement de plus en plus populaire. Dans le domaine de PHP, la manière de concevoir une programmation concurrente est également un sujet de grande préoccupation. Dans cet article, nous présenterons comment concevoir une programmation simultanée à l'aide de PHP.

1. Comprendre la programmation multi-processus PHP

Dans le domaine de PHP, une façon de réaliser une programmation simultanée consiste à utiliser le multi-processus. Le multi-traitement signifie exécuter plusieurs processus pour effectuer des tâches en même temps. Lors de la mise en œuvre d'une programmation multi-processus, vous devez vous appuyer sur la prise en charge multi-processus fournie par le système d'exploitation. Les méthodes courantes incluent fork, exec, popen, etc.

Parmi eux, la méthode fork utilise le mécanisme de réplication du système d'exploitation pour créer un nouveau processus identique et exécuter des codes différents dans le processus parent et le processus enfant. La méthode exec remplace le processus actuel par un processus enfant et continue d'exécuter différents codes dans le nouveau processus. La méthode popen ouvre un processus et renvoie un pointeur de fichier, qui peut être utilisé pour lire ou écrire les flux d'entrée et de sortie du processus. Les trois méthodes ci-dessus nécessitent toutes la prise en charge du système d'exploitation et nécessitent des ajustements appropriés dans différents systèmes d'exploitation.

2. Communication inter-processus

Dans la programmation multi-processus, la communication inter-processus est essentielle. La communication inter-processus est la manière dont plusieurs processus échangent des informations. Les méthodes de communication inter-processus courantes incluent les canaux, les files d'attente de messages, la mémoire partagée et les sémaphores.

Pipeline est la méthode de communication inter-processus la plus simple et constitue un flux d'octets unidirectionnel. Vous pouvez créer un canal via la méthode pipe, utiliser la méthode fwrite pour y écrire des informations et utiliser la méthode fread pour en lire des informations.

La file d'attente de messages est une méthode de communication inter-processus qui peut résoudre les problèmes de communication asynchrone entre les processus. Utilisez la méthode msg_send pour envoyer des messages à la file d'attente des messages et utilisez la méthode msg_receive pour lire les informations de la file d'attente des messages.

La mémoire partagée est un moyen de partager la mémoire entre les processus. Plusieurs processus peuvent accéder à la même zone mémoire en même temps. Utilisez la méthode shm_attach pour attacher la mémoire partagée au processus en cours, utilisez la méthode shm_put_var pour écrire des données et la méthode shm_get_var pour lire les données.

Les sémaphores sont une méthode de synchronisation inter-processus qui peut être utilisée pour coordonner la séquence d'exécution de plusieurs processus. Utilisez la méthode shm_attach pour initialiser un sémaphore, la méthode sem_acquire pour verrouiller le sémaphore et la méthode sem_release pour libérer le sémaphore.

3. Pratique de la programmation simultanée multi-processus PHP

Ci-dessous, nous utilisons un exemple simple pour comprendre comment utiliser PHP pour la programmation simultanée multi-processus. Supposons que nous devions rechercher une chaîne spécifiée dans un fichier volumineux et afficher le numéro de ligne et le contenu où la chaîne apparaît. Si le traitement est effectué dans un seul thread, cela peut prendre beaucoup de temps. À l'heure actuelle, l'utilisation de la programmation simultanée multi-processus peut réduire considérablement le temps de traitement.

Les étapes spécifiques de mise en œuvre sont les suivantes :

  1. Divisez un gros fichier en plusieurs petits fichiers, et chaque petit fichier est traité par un processus.
  2. Utilisez la file d'attente des messages pour enregistrer les résultats trouvés par chaque processus.
  3. Attendez que les tâches de chaque processus soient terminées et lisez les résultats du traitement dans la file d'attente des messages.
  4. Sortez les résultats du traitement sur la sortie standard.

L'exemple de code est le suivant :

$filename = 'big_file.txt';
$keyword = 'test';

$file = fopen($filename, 'r');
$lineCount = 0;
while(!feof($file)) {
    $line = fgets($file);
    $lineCount++;
    if(strpos($line, $keyword) !== false) {
        $msgQueue = msg_get_queue(1234, 0666);
        msg_send($msgQueue, 2, serialize([$lineCount, $line]), false);
    }
}
fclose ($file);

$numProcesses = 4;
for ($i = 0; $i < $numProcesses; $i++) {
    $pid = pcntl_fork();
    if ($pid == -1) {
        exit("Error forking process");
    } elseif ($pid == 0) {
        $msgQueue = msg_get_queue(1234, 0666);
        while (msg_receive($msgQueue, 2, $msgType, 1024, $data)) {
            list($lineNum, $lineContent) = unserialize($data);
            if ($lineContent) {
                echo "Line $lineNum: $lineContent
";
            }
        }
        exit();
    }
}

while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);
}

Dans l'exemple ci-dessus, nous divisons le gros fichier en 4 petits fichiers, et chaque sous-processus est responsable de la recherche d'un petit fichier. Après avoir trouvé la ligne contenant le mot-clé de recherche, les résultats de la recherche sont envoyés au processus principal via la file d'attente des messages. Le processus principal reçoit les résultats de recherche de chaque sous-processus via la file d'attente de messages et les envoie vers la sortie standard.

4. Résumé

À travers les exemples ci-dessus, nous pouvons voir que PHP, en tant que langage de script, peut également bien prendre en charge la programmation multi-processus. L'utilisation de PHP pour la programmation simultanée peut améliorer considérablement l'efficacité de l'exécution du programme et convient aux scénarios nécessitant le traitement simultané de grandes quantités de données. Bien entendu, en raison des caractéristiques de PHP lui-même, il existe également certaines difficultés et limitations. Par exemple, des problèmes tels que le partage de variables et la concurrence entre les ressources en PHP nécessitent une attention particulière. Par conséquent, lors de la conception de la programmation simultanée PHP, il est nécessaire de prendre en compte de manière exhaustive divers facteurs et d'effectuer suffisamment de tests et de réglages.

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!

Déclaration:
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