ホームページ  >  記事  >  PHPフレームワーク  >  swooleのマルチプロセス操作を見てみる

swooleのマルチプロセス操作を見てみる

coldplay.xixi
coldplay.xixi転載
2021-03-03 10:50:022427ブラウズ

swooleのマルチプロセス操作を見てみる

#複数のタスクを同時に実行する

順次実行されたタスクを並列実行に変換します (タスク 論理的には

たとえば、既知のユーザー データから電子メールやテキスト メッセージを送信する必要があるかどうかを判断し、送信する必要がある場合は送信する必要があります。

マルチプロセスを使用しない場合は、まずメールを送信するかどうかを判断して必要に応じて送信し、次にテキストメッセージの送信が必要かどうかを判断して必要に応じて送信します。電子メールの送信に 2 秒かかり、テキスト メッセージの送信に 2 秒かかる場合、タスクが完了するまでに約 4 秒かかります。

マルチスレッドを使用すると、メール処理用とテキストメッセージ処理用の2つのスレッドを開くことができ、合計2秒程度で処理時間が半分に短縮されます。

推奨事項 (無料): 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;]);
    }
}

swooleのマルチプロセス操作を見てみる

大きなタスクを複数の小さなタスクに分割するタスク

周期的に実行されるタスクを複数のプロセスに分割して実行し、作業効率を向上させます

現在、curl を通じて Web コンテンツを取得するシステムがあるとします。要件として、10 個の Web ページをクロールする必要があります。URL アドレスは配列を通じて読み取られます。各カールには 2 秒かかります。これら 10 個の Web ページを for ループでクロールすると、20 秒かかります。マルチプロセスを使用すると、タスクを 5 つの部分に分割し、それぞれを 5 つのプロセスで実行できます。各プロセスは 2 つの URL を取得し、同時に実行します。合計4秒で効率は5倍になります。

<?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";
}

swooleのマルチプロセス操作を見てみる

概要

上記の状況はいずれも、本質的には、論理的な順序を持たないタスクを 1 つに結合するものです。プロセスは同時に実行されます。効率を向上させるために。

PHP メカニズム自体はマルチスレッド操作を提供しませんが、ptcl 拡張機能は、PHP が Linux マルチプロセスを操作するためのインターフェイスを提供します。

個人的にはswooleの多工程処理方式のほうが便利な気がします。

以上がswooleのマルチプロセス操作を見てみるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。