前言:
之前想通过PHP多线程分批去处理请求,等最后安装好,运行成功后才发现官方的一句话,最后不得不放弃使用了。
SAPI Support
pthreads v3 is restricted to operating in CLI only: I have spent many years trying to explain that threads in a web server just don't make sense, after 1,111 commits to pthreads I have realised that, my advice is going unheeded.
So I'm promoting the advice to hard and fast fact: you can't use pthreads safely and sensibly anywhere but CLI.
Thanks for listening ;)
安装:
1,我是使用oneinstack 集成工具,安装Thread前需要在oneinstack/options.conf 增加php编译扩展(开启安全模式)
php_modules_options='--enable-maintainer-zts '
2,检查是否已开启安全线程 php -i | grep Thread => 看到enable 表示是安全版
3,下载最新的Pthreads扩展 git clone https://github.com/krakjoe/pthreads.git
4,在下载好的pthreads目录下执行phpsize命令 phpize
5,执行安装命令 ./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
6,写入配置文件 echo "extension=pthreads.so" >> /usr/local/php/etc/php.ini
7,测试代码 class My extends Thread {
public function run() {
sleep(10);
echo("HELLO 1 \r\n");
}
}
class My2 extends Thread {
public function run() {
/* ... */
sleep(3);
echo("HELLO 2 \r\n");
}
}
class My3 extends Thread {
public function run() {
/* ... */
sleep(1);
echo("HELLO 3 \r\n");
}
}
class My4 extends Thread {
public function run() {
/* ... */
sleep(5);
echo("HELLO 4 \r\n");
}
}
$my_1 = new My();
$my_2 = new My2();
$my_3 = new My3();
$my_4 = new My4();
$my_1->start();
$my_2->start();
$my_3->start();
$my_4->start();
$my_1->join();
$my_2->join();
$my_3->join();
$my_4->join();
echo("main ");
ECHO
HELLO 3 => HELLO 2 => HELLO 4 => HELLO 1 => main
8,参考http://blog.51cto.com/quietnight/1765370

我的博客:http://hihubs.com/article/286