Maison > cadre php > Swoole > le corps du texte

Jetez un œil au fonctionnement multi-processus de Swoole

coldplay.xixi
Libérer: 2021-03-03 10:50:39
avant
2438 Les gens l'ont consulté

Jetez un œil au fonctionnement multi-processus de Swoole

Plusieurs tâches sont exécutées simultanément

Convertir les tâches exécutées séquentiellement en exécution parallèle (tâche Logiquement, elle peut être exécuté en parallèle)

Par exemple, nous devons juger des données utilisateur connues si des e-mails et des SMS doivent être envoyés, et si oui, les envoyer.

Lorsque le multi-processus n'est pas utilisé, nous déterminons d'abord s'il faut envoyer un e-mail et l'envoyons si nécessaire ; ensuite nous déterminons si un message texte doit être envoyé et l'envoyons si nécessaire. S'il faut 2 secondes pour envoyer un e-mail et 2 secondes pour envoyer un message texte, il nous faudra environ 4 secondes pour terminer la tâche.

Si nous utilisons le multithreading, nous pouvons ouvrir deux fils de discussion, un pour le traitement des e-mails et un pour le traitement des messages texte. Cela prendra au total environ 2 secondes et le temps de traitement est réduit de moitié.

Recommandé (gratuit) : swoole

<?php/**
 * Created by PhpStorm.
 * User: zhezhao
 * Date: 2016/10/20
 * Time: 10:37
 */$info = array(    "sendmail"=>1,    "mailto"=>"12345@qq.com",    "sendsms"=>1,    "smsto"=>"123456");echo "start:".date("Y-m-d H:i:s").PHP_EOL;$mail_process = new swoole_process(&#39;sendMail&#39;,true);$mail_process->start();$sms_process = new swoole_process(&#39;sendSMS&#39;,true);$sms_process->start();//主进程输出子进程范围内容echo $mail_process->read();echo PHP_EOL;echo $sms_process->read();echo PHP_EOL;echo "end:".date("Y-m-d H:i:s").PHP_EOL;//并行函数function sendMail(swoole_process $worker){
    global $info;    if($info[&#39;sendmail&#39;]==1){
        sleep(2);        $worker->write("send mail to ".$info[&#39;mailto&#39;]);
    }
}function sendSMS(swoole_process $worker){
    global $info;    if($info[&#39;sendmail&#39;]==1){
        sleep(2);        $worker->write("send sms to ".$info[&#39;smsto&#39;]);
    }
}
Copier après la connexion

Jetez un œil au fonctionnement multi-processus de Swoole

Diviser les grandes tâches en petites tâches

Divisez les tâches exécutées de manière cyclique en plusieurs processus d'exécution afin d'améliorer l'efficacité du travail

Supposons que nous ayons maintenant un système qui récupère le contenu Web via curl Selon le exigence, 10 pages Web doivent être explorées. L'adresse URL est lue dans le tableau. Chaque boucle prend 2 secondes. Si nous explorons ces 10 pages Web à travers une boucle for, cela prendra 20 secondes. En utilisant le multi-processus, nous pouvons diviser la tâche en 5 parties et les exécuter respectivement par 5 processus. Chaque processus récupère 2 URL et les exécute simultanément. Au total, cela prend 4 secondes et l'efficacité est augmentée de 5 fois.

<?php/**
 * Created by PhpStorm.
 * User: zhezhao
 * Date: 2016/10/20
 * Time: 10:51
 */$url_arr = array();for ($i=0;$i<10;$i++){    $url_arr[] = "www.baidu.com?wd=".$i;
}echo "start:".date("Y-m-d H:i:s").PHP_EOL;$workers = array();for ($i=0;$i<5;$i++){    $process = new swoole_process(&#39;getContents&#39;,true);    $process->start();    $process->write($i);    $workers[] = $process;
}//主进程数据结果foreach ($workers as $process){    echo $process->read();    echo PHP_EOL;
}echo "end:".date("Y-m-d H:i:s").PHP_EOL;function getContents(swoole_process $worker){
    $i = $worker->read();    global $url_arr;    $res1 = execCurl($url_arr[($i*2)]);    $res2 = execCurl($url_arr[($i*2+1)]);    echo $res1.PHP_EOL.$res2;
}function execCurl($url){
    sleep(2);    return "handle ".$url." finished";
}
Copier après la connexion

Jetez un œil au fonctionnement multi-processus de Swoole

Résumé

Les deux situations ci-dessus consistent essentiellement à utiliser plusieurs tâches logiquement indépendantes qui sont exécutées simultanément pour améliorer l'efficacité.

Le mécanisme PHP lui-même ne fournit pas d'opérations multithread. L'extension ptcl fournit une interface permettant à PHP de faire fonctionner plusieurs processus Linux.

Personnellement, je pense que la méthode multi-processus de Swoole est plus pratique.

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:csdn.net
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!