PHP 真正多线程的使用

以前使用curl的多线程并不是真正的多线程,只是一种模拟的多线程,现在使用pthreads来实现真正意义上的多线程。

下载:

  windows下:

    http://windows.php.net/downloads/pecl/releases/pthreads/0.0.45/

  mac、unix、linux下:

    https://github.com/krakjoe/pthreads

    或:http://pecl.php.net/package/pthreads(含文档)

安装方式:

  windows下:

    解压得到pthreadVC2.dll和php_pthreads.dll文件,把vc2文件放到php.exe同级目录,把php_pthreads.dll放到扩展目录下。

    修改php.ini文件 添加extension=php_pthreads.dll

    修改Apache配置文件httpd.conf 添加LoadFile "yourpath/php/pthreadVC2.dll"

  mac、unix、linux下:

    具体可参考宴哥的博客http://zyan.cc/pthreads/

调用方式:

  具体的用法也可以参考宴哥的博客http://zyan.cc/pthreads/

<?php
class Request extends Thread {
    public $url;
    public $data;
    public function __construct($url) {
        $this->url = $url;
    }
    public function run() {
        // 线程处理一个耗时5秒的任务
        for($i=0;$i<5;$i++) {
            echo '线程: '.date('H:i:s')."
";
            sleep(1);
        }
        $response = file_get_contents($this->url);
        if ($response) {
            $this->data = array($response);
        }
        echo "线程: 任务完成
";
    }
}
$request = new Request('hello.html');
// 运行线程:start()方法会触发run()运行
if ($request->start()) {
    // 主进程处理一个耗时10秒的任务,此时线程已经工作
    for($i=0;$i<10;$i++) {
        echo '进程: '.date('H:i:s')."
";
        sleep(1);
    }
    // 同步线程并输出线程返回的数据
    $request->join();
    echo '线程返回数据: '.$request->data[0];
}
/*
如果顺序执行,合计时间将是15秒,借助线程,则只需10秒.
生成文件: echo 'Hello' > hello.html
运行计时: time php req.php 
查看线程: ps -efL|head -n1 && ps -efL|grep php
*/

 

原文地址:https://www.cnblogs.com/liuwei9002/p/4908887.html