前言:
之前想通過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,測試代碼
<?php
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 ");
// 輸出結果
HELLO 3 => HELLO 2 => HELLO 4 => HELLO 1 => main 
                                