我們首先來看一個示例
?php
class execMulti {
function MultithreadTest {
exec("php static_massive.php > /dev/null ");
echo "處理完成了";
}
}
?>
當(dāng)執(zhí)行上述操作時,即使在耗時的處理結(jié)束之前也顯示處理完成。
exec("php static_massive.php > /dev/null ");
由于“ > / dev / null& ”返回的值丟失,我們不會等待響應(yīng)。
因此,處理完成指示比耗時處理更快。
但是,該方法不知道耗時的處理何時結(jié)束。
不要忘記考慮采取日志的執(zhí)行,登錄DB等方法向用戶傳遞執(zhí)行結(jié)果。
用于多線程的方法(pthreads)
最后,介紹使用PHP擴展模塊pthreads的方法。
它可以比上面使用exec的方法更簡單。
①配置環(huán)境并安裝php
請使用vagrant等準(zhǔn)備喜歡的環(huán)境。
php 需要使用線程安全版本,這是多線程和安全的實現(xiàn)。
從官方下載線程安全版本的 PHP。
訪問以下內(nèi)容并從圖中的紅框下載。
http://www.php.net/downloads.php
此外,對于線程安全安裝,您需要使用configure選項指定-enable-maintainer-zts。
./configure --enable-maintainer-zts
根據(jù)需要,也可以安上Apache和mysql的選項。
用以下命令確認了php的版本就可以了。
②pthreads的安裝
我們來下載zip格式。
https://github.com/krakjoe/pthreads/archive/master.zip
解壓zip,移動到解壓縮文件,然后執(zhí)行phpize。
如果您在PHP模塊列表上運行pthreads,則可以執(zhí)行以下操作。
根據(jù)環(huán)境的不同,這一塊的設(shè)定也會有所不同,可以用環(huán)境名+pthreads等進行檢索來尋找信息。
③嘗試使用多線程
示例如下
?php
class pthreadsTest extends Thread {
public function run () {
sleep(5);
}
}
$ts1 = new pthreadsTest();
$ts1->start();
$ts2 = new pthreadsTest();
$ts2->start();
?>
因為sleep(5)被調(diào)用兩次,所以需要10秒,但實際上它將是5秒。
您可能感興趣的文章:- 淺談php使用curl模擬多線程發(fā)送請求
- php使用curl_init()和curl_multi_init()多線程的速度比較詳解
- PHP多線程模擬實現(xiàn)秒殺搶單
- PHP7多線程搭建教程
- PHP中多線程的兩個實現(xiàn)方法
- php與python實現(xiàn)的線程池多線程爬蟲功能示例
- php多線程并發(fā)實現(xiàn)方法
- php中foreach結(jié)合curl實現(xiàn)多線程的方法分析
- 如何用PHP實現(xiàn)多線程編程