Mehrere Aufgaben gleichzeitig ausführen
Sequentiell ausgeführte Aufgaben in parallele Ausführung umwandeln (Aufgaben können logischerweise parallel ausgeführt werden)
Zum Beispiel müssen wir anhand der bekannten Benutzerdaten beurteilen, ob Sie müssen E-Mails und Textnachrichten senden. Wenn ja, senden Sie sie.
Wenn Multiprozess nicht verwendet wird, bestimmen wir zunächst, ob eine E-Mail gesendet werden soll, und senden diese gegebenenfalls. Anschließend ermitteln wir, ob eine Textnachricht gesendet werden muss, und senden diese gegebenenfalls. Wenn das Senden einer E-Mail 2 Sekunden und das Senden einer Textnachricht 2 Sekunden dauert, benötigen wir etwa 4 Sekunden, um die Aufgabe abzuschließen.
Wenn wir Multithreading verwenden, können wir zwei Threads öffnen, einen für die Verarbeitung von E-Mails und einen für die Verarbeitung von Textnachrichten. Dies dauert insgesamt etwa 2 Sekunden und die Verarbeitungszeit wird um die Hälfte reduziert.
Empfohlen (kostenlos): 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('sendMail',true);$mail_process->start();$sms_process = new swoole_process('sendSMS',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['sendmail']==1){ sleep(2); $worker->write("send mail to ".$info['mailto']); } }function sendSMS(swoole_process $worker){ global $info; if($info['sendmail']==1){ sleep(2); $worker->write("send sms to ".$info['smsto']); } }
Teilen Sie große Aufgaben in mehrere kleine Aufgaben auf
Teilen Sie zyklisch ausgeführte Aufgaben zur Ausführung in mehrere Prozesse auf, um die Arbeitseffizienz zu verbessern
Angenommen, wir jetzt habe Eine Notwendigkeit, Webinhalte durch Curl zu crawlen. Die URL-Adresse wird durch ein Array gelesen. Jeder Curl dauert 2 Sekunden. Wenn wir diese 10 Webseiten durch eine for-Schleife crawlen, dauert dies 20 Sekunden. Mithilfe von Multiprozessen können wir die Aufgabe in 5 Teile aufteilen und sie jeweils durch 5 Prozesse ausführen Insgesamt dauert es 4 Sekunden und die Effizienz wird um das Fünffache erhöht.
<?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('getContents',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"; }
Zusammenfassung
In den beiden oben genannten Situationen werden im Wesentlichen mehrere Prozesse verwendet, um gleichzeitig Aufgaben auszuführen, die keine logische Reihenfolge haben, um die Effizienz zu verbessern.
Der PHP-Mechanismus selbst bietet keine Multithread-Operationen. Die ptcl-Erweiterung bietet eine Schnittstelle für PHP zum Betrieb von Linux-Multiprozessen.
Ich persönlich finde, dass die Multiprozessmethode von Swoole praktischer ist.
Das obige ist der detaillierte Inhalt vonSchauen Sie sich den Mehrprozessbetrieb von Swoole an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!