Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Erweiterung Multithreading

PHP-Erweiterung Multithreading

墨辰丷
墨辰丷Original
2018-05-16 11:47:142438Durchsuche

Dieser Artikel stellt hauptsächlich PHP-Multithreading vor. Ich hoffe, dass er für alle hilfreich ist.

PHP 5.3 und höher kann mithilfe der PHP-Erweiterung pthreads dafür sorgen, dass PHP Multithreading wirklich unterstützt.
Mehrere Threads können die Programmausführungszeit bei der Verarbeitung sich wiederholender zyklischer Aufgaben erheblich verkürzen.
PHP-Erweiterung herunterladen: https://github.com/krakjoe/pthreads
PHP-Handbuchdokument: http://php.net/manual/zh/book.pthreads.php
1. Kompilierung der Erweiterung (Linux), Parameter bearbeiten – „enable-maintainer-zts“ ist eine erforderliche Option:

'./configure'
'--prefix=/usr/local/webserver/php'
'--with-config-file-path=/usr/local/webserver/php/etc'
'--with-apxs2=/usr/local/webserver/httpd/bin/apxs'
'--with-libxml-dir=/usr/local/webserver/libxml2'
'--with-mysql=/usr/local/webserver/mysql'
'--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config'
'--enable-soap' '--enable-sockets' '--with-curl' --enable-maintainer-ztsmake clean
make
make install
unzip pthreads-master.zip
cd pthreads-master
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
makemake install
vi /usr/local/webserver/php/etc/php.ini

Hinzufügen

extension = "pthreads.so"

2. Geben Sie eine PHP-Multithreading- und For-Schleife an, um die Baidu-Suchseite PHP zu erfassen Codebeispiel:

<?php
class test_thread_run extends Thread{
    public $url;    public $data;    public function __construct($url)
    {
        $this->url = $url;
    }    public function run()
    {
        if(($url = $this->url))
        {        $this->data = model_http_curl_get($url);
        }
    }
}
<?php
function model_thread_result_get($urls_array){
    foreach ($urls_array as $key => $value)
    {        $thread_array[$key] = new test_thread_run($value["url"]);        
                 $thread_array[$key]->start();
    }    
    foreach ($thread_array as $thread_array_key => $thread_array_value)
    {        
    while($thread_array[$thread_array_key]->isRunning())
        {
        usleep(10);
        }        
        if($thread_array[$thread_array_key]->join())
        {            
        $variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data;
        }
    }    
    return $variable_data;
}
function model_http_curl_get($url,$userAgent="")
{
    $userAgent = $userAgent ? $userAgent : &#39;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)&#39;;    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 5);
    curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);    
    $result = curl_exec($curl);
    curl_close($curl);    return $result;
}
for ($i=0; $i < 100; $i++)
{    
        $urls_array[] = array("name" => "baidu", "url" =>    
        "http://www.baidu.com/s?wd=".mt_rand(10000,20000));
    }    $t = microtime(true);    
    $result = model_thread_result_get($urls_array);    
    $e = microtime(true);    
    echo "多线程:".($e-$t)."\n";    
    $t = microtime(true);    
    foreach ($urls_array as $key => $value)
    {    
    $result_new[$key] = model_http_curl_get($value["url"]);
}
$e = microtime(true);
echo "For循环:".($e-$t)."\n";
?>

Verwandte Empfehlungen:

H5+WebWorkers Multi-Thread-Entwicklung und Verwendung, detaillierte Erklärung

PHP-Multi-Thread-Simulation um Flash-Verkäufe zu erzielen. Schnappen Sie sich Bestellungen

PHP implementiert Multiprozess und Multithreading

Das obige ist der detaillierte Inhalt vonPHP-Erweiterung Multithreading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn