Maison  >  Article  >  développement back-end  >  Comment utiliser PHP7.0 pour la programmation simultanée ?

Comment utiliser PHP7.0 pour la programmation simultanée ?

WBOY
WBOYoriginal
2023-05-28 08:51:241394parcourir

PHP7.0 est l'un des langages de programmation côté serveur les plus couramment utilisés. Il possède une interface conviviale, facile à apprendre, des fonctions puissantes et une riche bibliothèque d’extensions. En termes de programmation simultanée, PHP7.0 dispose également de nombreux excellents outils et technologies. Cet article explique comment effectuer une programmation simultanée en PHP7.0.

1. Qu'est-ce que la programmation simultanée

La programmation simultanée fait référence à une programmation qui permet d'exécuter plusieurs tâches en même temps via plusieurs threads, processus ou coroutines. En programmation, l’utilisation efficace des techniques de concurrence peut améliorer les performances et le débit du programme.

2. Outils de programmation simultanée de PHP7.0

Dans PHP7.0, il existe de nombreux outils parmi lesquels choisir pour écrire des programmes simultanés. Voici quelques outils couramment utilisés :

1 Extension PCNTL

L'extension PCNTL fournie par PHP fournit un ensemble de fonctions de gestion des processus et de traitement du signal. Grâce à cette extension, vous pouvez facilement gérer plusieurs tâches exécutées dans le même processus en même temps.

2. extension pthread

pthread extension est une extension PHP utile qui implémente l'interface de thread POSIX en PHP. Cette extension fournit diverses fonctionnalités pour créer, détruire, synchroniser et communiquer des threads.

3. Extension Swoole

Swoole est une extension PHP qui fournit des fonctions de programmation asynchrone, non bloquantes et coroutines. Cette extension est devenue l'un des projets open source les plus populaires en PHP, fournissant un cadre de programmation simultané complet comprenant des protocoles réseau, des pools de threads, des tâches asynchrones, etc.

4, protocole AMQP

Protocole AMQP, le nom complet est Advanced Message Queuing Protocol, est un protocole de file d'attente de messages standard. Grâce au protocole AMQP, des opérations asynchrones et distribuées peuvent être mises en œuvre, et une programmation simultanée peut être facilement mise en œuvre.

3. Technologies et exemples d'utilisation de PHP7.0 pour la programmation simultanée

Voici quelques technologies et exemples d'utilisation de PHP7.0 pour la programmation simultanée :

# 🎜🎜#1. Utilisez l'extension PCNTL

La manière classique de synchroniser plusieurs tâches consiste à utiliser le mécanisme fork. Grâce à cette technologie, vous pouvez démarrer plusieurs sous-processus en un seul processus pour exécuter plusieurs tâches simultanément. Voici un exemple de code :

$NUM_CHILDREN = 5;  

$pid_array = array();  

for ($i = 0; $i < $NUM_CHILDREN; ++$i) {  
    $pid = pcntl_fork();  

    if ($pid == -1) {  
        die('could not fork');  
    } else if ($pid) {  
        $pid_array[] = $pid;  
    } else {  
        sleep(5);  
        exit(0);  
    }  
}  

while(count($pid_array) > 0) {  
    foreach($pid_array as $key => $pid) {  
        $res = pcntl_waitpid($pid, $status, WNOHANG);  

        if($res == -1 || $res > 0) {  
            unset($pid_array[$key]);  
        }  
    }  
}  

L'exemple ci-dessus définit d'abord une variable $num_children, indiquant le nombre de tâches qui doivent être exécutées simultanément. Ensuite, il démarre les processus enfants $num_children et attend qu'ils se terminent. Notez que dans cet exemple, le processus principal se terminera une fois le processus enfant terminé.

2. Utilisez l'extension pthread

En utilisant l'extension pthread, vous pouvez facilement créer et gérer plusieurs threads simultanés pour effectuer plusieurs tâches en même temps. Voici un exemple simple :

class MyThread extends Thread {   
    public function run() {  
        echo "Task started";  
        sleep($this->rand(1, 5));  
        echo "Task completed";  
    }  
}  

$thread1 = new MyThread();  
$thread1->start();  

$thread2 = new MyThread();  
$thread2->start();  

$thread1->join();  
$thread2->join();  

Dans le code ci-dessus, une classe de thread personnalisée nommée MyThread est définie. Cette classe remplace la méthode run dans la classe Thread et y définit des tâches simultanées. Dans la section de code principale, créez une instance de thread et utilisez la méthode start() pour démarrer le thread. Ensuite, utilisez la méthode join() pour attendre la fin du thread.

3. Utiliser l'extension Swoole

L'extension Swoole fournit un cadre de programmation simultanée pratique, qui peut facilement gérer le développement asynchrone, non bloquant et coroutine. Voici un exemple de programmation simultanée utilisant Swoole :

$server = new swoole_http_server("127.0.0.1", 9501);  

$server->on('request', function ($request, $response) {  
    $response->header("Content-Type", "text/plain");  
    $response->end("Hello World
");  
});  

$server->start();

Le code ci-dessus crée un serveur HTTP Swoole, écoutant sur le port 9501. Sur demande, le serveur renverra simplement « Hello World ». Notez que le code écrit dans cet exemple est asynchrone et non bloquant. Cela permet au serveur de traiter de nombreuses requêtes simultanément avec des performances unitaires élevées.

4. Utilisez le protocole AMQP

Le protocole AMQP est une norme de file d'attente de messages distribuée. Grâce au protocole AMQP, les opérations d'envoi et de réception de messages, ainsi que la programmation asynchrone peuvent être facilement mises en œuvre. Voici un exemple de programmation simultanée AMQP :

require __DIR__ . '/vendor/autoload.php';  

use PhpAmqpLibConnectionAMQPConnection;  

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');  
$channel = $connection->channel();  

$channel->queue_declare('task_queue', false, true, false, false);  

echo ' [*] Waiting for messages. To exit press CTRL+C', "
";  

$callback = function($msg) {  
  echo " [x] Received ", $msg->body, "
";  
  sleep(substr_count($msg->body, '.'));  
  echo " [x] Done", "
";  
};  

$channel->basic_qos(null, 1, null);  

$channel->basic_consume('task_queue', '', false, true, false, false, $callback);  

while(count($channel->callbacks)) {  
    $channel->wait();  
}  

$channel->close();  
$connection->close();  

Dans le code ci-dessus, une file d'attente de tâches est créée sur la file d'attente lapinmq à l'aide du protocole AMQP pour obtenir des tâches asynchrones, puis signaler une fois la tâche terminée. Dans cet exemple, nous utilisons la bibliothèque PhpAmqpLib, qui est une bibliothèque d'extension PHP qui encapsule le protocole AMQP.

4. Résumé

Grâce à la programmation simultanée PHP7.0, vous pouvez plus facilement implémenter des applications hautes performances et à haut débit. Dans cet article, nous présentons certains outils de programmation simultanée PHP couramment utilisés, notamment l'extension PCNTL, l'extension pthread, l'extension Swoole et le protocole AMQP. De plus, nous montrons également quelques exemples d’utilisation de ces outils. Si vous souhaitez maximiser les performances de votre application, envisagez d'essayer ces techniques.

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