Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert die Single-Thread-Programmiersprache PHP Multi-Thread-Operationen?

Wie implementiert die Single-Thread-Programmiersprache PHP Multi-Thread-Operationen?

PHP中文网
PHP中文网Original
2017-08-26 09:30:122423Durchsuche

Jeder weiß, dass die Sprache PHP selbst nur Single-Threaded sein kann. Nachdem ein Arbeitsschritt abgeschlossen ist, wird der nächste Schritt ausgeführt.

Aber manchmal benötigen wir asynchrone Operationen und mehrere Threads, die gleichzeitig ausgeführt werden

Lassen Sie uns vorstellen, wie PHP Multithread-Operationen implementiert.

Der Code ist wie folgt folgt: Nur als Referenz

<?php
/**
 * @title:        PHP多线程类(Thread)
 * @version:    1.0
 * @author:        php.cn < web@php.cn >
 * @published:    2010-11-2
 * 
 * PHP多线程应用示例:
 *  require_once &#39;thread.class.php&#39;;
 *  $thread = new thread();
 *  $thread->addthread(&#39;action_log&#39;,&#39;a&#39;);
 *  $thread->addthread(&#39;action_log&#39;,&#39;b&#39;);
 *  $thread->addthread(&#39;action_log&#39;,&#39;c&#39;);
 *  $thread->runthread();
 *  
 *  function action_log($info) {
 *      $log = &#39;log/&#39; . microtime() . &#39;.log&#39;;
 *      $txt = $info . "\r\n\r\n" . &#39;Set in &#39; . Date(&#39;h:i:s&#39;, time()) . (double)microtime() . "\r\n";
 *      $fp = fopen($log, &#39;w&#39;);
 *      fwrite($fp, $txt);
 *      fclose($fp);
 *  }
 */
class thread {
    var $hooks = array();
    var $args = array();
    function thread() {
    }
    function addthread($func)
    {
        $args = array_slice(func_get_args(), 1);
        $this->hooks[] = $func;
        $this->args[] = $args;
        return true;
    }
    function runthread()
    {
        if(isset($_GET[&#39;flag&#39;]))
        {
            $flag = intval($_GET[&#39;flag&#39;]);
        }
        if($flag || $flag === 0)
        {
            call_user_func_array($this->hooks[$flag], $this->args[$flag]);
        }
        else
        {
            for($i = 0, $size = count($this->hooks); $i < $size; $i++)
            {
                $fp=fsockopen($_SERVER[&#39;HTTP_HOST&#39;],$_SERVER[&#39;SERVER_PORT&#39;]);
                if($fp)
                {
                    $out = "GET {$_SERVER[&#39;PHP_SELF&#39;]}?flag=$i HTTP/1.1\r\n";
                    $out .= "Host: {$_SERVER[&#39;HTTP_HOST&#39;]}\r\n";
                    $out .= "Connection: Close\r\n\r\n";
                    fputs($fp,$out);
                    fclose($fp);
                }
            }
        }
    }
}
$thread = new thread();
$thread->addthread(&#39;func1&#39;,&#39;info1&#39;);
$thread->addthread(&#39;func2&#39;,&#39;info2&#39;);
$thread->addthread(&#39;func3&#39;,&#39;info3&#39;);
$thread->runthread();
//说明:
//addthread是添加线程函数,第一个参数是函数名,之后的参数(可选)为传递给指定函数的参数。
//runthread是执行线程的函数。

Dieser Artikel wird von der chinesischen PHP-Website bereitgestellt und stellt die Verwendung von PHP zur Simulation von Multithreading-Funktionen vor.

Artikeladresse: http://www.php.cn/php-weizijiaocheng-377481.html

Lernen Sie Programmieren auf der chinesischen PHP-Website www.php.cn

Das obige ist der detaillierte Inhalt vonWie implementiert die Single-Thread-Programmiersprache PHP Multi-Thread-Operationen?. 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