實(shí)例講解php實(shí)現(xiàn)多線程
我們首先來(lái)看一個(gè)示例
<?php class execMulti { function MultithreadTest { exec("php static_massive.php > /dev/null &"); echo "處理完成了"; } } ?>
當(dāng)執(zhí)行上述操作時(shí),即使在耗時(shí)的處理結(jié)束之前也顯示處理完成。
exec("php static_massive.php > /dev/null &");
由于“ > / dev / null& ”返回的值丟失,我們不會(huì)等待響應(yīng)。
因此,處理完成指示比耗時(shí)處理更快。
但是,該方法不知道耗時(shí)的處理何時(shí)結(jié)束。
不要忘記考慮采取日志的執(zhí)行,登錄DB等方法向用戶傳遞執(zhí)行結(jié)果。
用于多線程的方法(pthreads)
最后,介紹使用PHP擴(kuò)展模塊pthreads的方法。
它可以比上面使用exec的方法更簡(jiǎn)單。
①配置環(huán)境并安裝php
請(qǐng)使用vagrant等準(zhǔn)備喜歡的環(huán)境。
php 需要使用線程安全版本,這是多線程和安全的實(shí)現(xiàn)。
從官方下載線程安全版本的 PHP。
訪問以下內(nèi)容并從圖中的紅框下載。
http://www.php.net/downloads.php
此外,對(duì)于線程安全安裝,您需要使用configure選項(xiàng)指定-enable-maintainer-zts。
./configure --enable-maintainer-zts
根據(jù)需要,也可以安上Apache和mysql的選項(xiàng)。
用以下命令確認(rèn)了php的版本就可以了。
php -v
②pthreads的安裝
我們來(lái)下載zip格式。
https://github.com/krakjoe/pthreads/archive/master.zip
解壓zip,移動(dòng)到解壓縮文件,然后執(zhí)行phpize。
如果您在PHP模塊列表上運(yùn)行pthreads,則可以執(zhí)行以下操作。
php -m
根據(jù)環(huán)境的不同,這一塊的設(shè)定也會(huì)有所不同,可以用環(huán)境名+pthreads等進(jìn)行檢索來(lái)尋找信息。
③嘗試使用多線程
示例如下
<?php class pthreadsTest extends Thread { public function run () { sleep(5); } } $ts1 = new pthreadsTest(); $ts1->start(); $ts2 = new pthreadsTest(); $ts2->start(); ?>
因?yàn)閟leep(5)被調(diào)用兩次,所以需要10秒,但實(shí)際上它將是5秒。
相關(guān)文章
在Laravel 的 Blade 模版中實(shí)現(xiàn)定義變量
今天小編就為大家分享一篇在Laravel 的 Blade 模版中實(shí)現(xiàn)定義變量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10php設(shè)計(jì)模式之命令模式的應(yīng)用詳解
本篇文章是對(duì)php的命令模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Thinkphp頁(yè)面跳轉(zhuǎn)設(shè)置跳轉(zhuǎn)等待時(shí)間的操作
今天小編就為大家分享一篇Thinkphp頁(yè)面跳轉(zhuǎn)設(shè)置跳轉(zhuǎn)等待時(shí)間的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10PHP版單點(diǎn)登陸實(shí)現(xiàn)方案的實(shí)例
本篇文章主要介紹了PHP版單點(diǎn)登陸實(shí)現(xiàn)方案的實(shí)例,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11在Laravel 中實(shí)現(xiàn)是否關(guān)注的示例
今天小編就為大家分享一篇在Laravel 中實(shí)現(xiàn)是否關(guān)注的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10