版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——PHP實現(xiàn)多線程的方法技巧PHP+shell實現(xiàn)多線程的方法先寫個簡樸的php代碼,這里為了讓腳本執(zhí)行時間更長,便當(dāng)看效果。我們給大家?guī)砹司实腜HP實現(xiàn)多線程,下面大家一起來看看吧!
test.php的代碼:lsPHP代碼:
for$i=0;$i10;$i++
echo$i;
sleep10;
?在看下shell腳本的代碼,分外簡樸#!/bin/bash
foriin12345678910
do
/usr/bin/php-q/var//html/test.php
done留神到在苦求php代碼的那行有一個符號嗎,這個是關(guān)鍵,不加的話是不能舉行多線程的,表示講服務(wù)推送到后臺執(zhí)行,因此,在shell的每次的循環(huán)中不必等php的代碼全部執(zhí)行完在苦求下一個文件,而是同時舉行的,這樣就實現(xiàn)了多線程,下面運(yùn)行下shell看下效果,這里你將看到10個test.php進(jìn)程再跑,再利用linux的定時器,定時苦求這個shell,在處理一些需要多線程的任務(wù),例如,批量下載時,分外好用!php中用WEB服務(wù)器實現(xiàn)多線程假設(shè)我們現(xiàn)在運(yùn)行的是a.php這個文件.但是我在程序中又苦求WEB服務(wù)器運(yùn)行另一個b.php,那么這兩個文件將是同時執(zhí)行的.PS:一個鏈接苦求發(fā)送之后,WEB服務(wù)器就會執(zhí)行它,而不管客戶端是否已經(jīng)退出有些時候,我們想運(yùn)行的不是另一個文件,而是本文件中的一片面代碼.該怎么辦呢?
其實可是通過參數(shù)來操縱a.php來運(yùn)行哪一段程序.下面看一個例子://a.php,b.phpPHP代碼:
functionrunThread
$fp=fsockopenlocalhost,80,$errno,$errmsg;
fputs$fp,GET/b.php?act=brnrn;//這里的其次個參數(shù)是HTTP協(xié)議中規(guī)定的苦求頭
//不明白的請看RFC中的定義
fclose$fp;
functiona
$fp=fopenresult_a.log,w;
fputs$fp,Setin.Dateh:i:s,time.doublemicrotime.rn;
fclose$fp;
functionb
$fp=fopenresult_b.log,w;
fputs$fp,Setin.Dateh:i:s,time.doublemicrotime.rn;
fclose$fp;
if!isset$_GET[act]$_GET[act]=a;
if$_GET[act]==a
runThread;
a;
elseif$_GET[act]==bb;
?
開啟result_a.log和result_b.log對比一下兩個文件的中訪問的時間.大家會察覺,這兩個確實是在不同線程中運(yùn)行的.有些時間完全一樣.上面只是一個簡樸的例子,大家可以提升成其它形式.
既然PHP中也能多線程了,那么問題也來了,那就是同步的問題.我們知道PHP本身是不支持多線程的.所以更不會有什么像Java中synchronize的方法了.那我們該如何做呢.1.盡量不訪問同一個資源.以制止沖突.但是可以同時像數(shù)據(jù)庫操作.由于數(shù)據(jù)庫是支持并發(fā)操作的.所以在多線程的PHP中不要向同一個文件中寫入數(shù)據(jù).假設(shè)務(wù)必要寫的話,用別的方法舉行同步..如調(diào)用flock對文件舉行加鎖等.或建立臨時文件并在另外的線程中等待這個文件的消散whilefile_exitsxxx;這樣就等于這個臨時文件存在時,表示其實線程正在操作假設(shè)沒有了這個文件,說明其它線程已經(jīng)釋放了這個.2.盡量不要從runThread在執(zhí)行fputs后取這個socket中讀取數(shù)據(jù).由于要實現(xiàn)多線程,需要的用非阻塞模式.即在像fgets這樣的函數(shù)時立刻返回..所以讀寫數(shù)據(jù)就會出問題.假設(shè)使用阻塞模式的話,程序就不算是多線程了.他要等上面的返回才執(zhí)行下面的程序.所以假設(shè)需要交換數(shù)據(jù)結(jié)果利用外面文件或數(shù)據(jù)中完成.實在想要的話就用socket_set_nonblock$fp來實現(xiàn).
說了這么多,倒底這個有沒有實際的意義呢?在什么時候需要這種用這種方法呢?
答案是斷定的.大家知道.在一個不斷讀取網(wǎng)絡(luò)資源的應(yīng)用中,網(wǎng)絡(luò)的速度是瓶頸.假設(shè)采多這種形式就可以同時以多個線程對不同的頁面舉行讀取.本人做的一個能從8848、soaso這些商城網(wǎng)站探尋信息的程序。還有一個從阿里巴巴網(wǎng)站上讀取商業(yè)信息和公司目次的程序也用到了此技術(shù)。由于這兩個程序都是要不斷的鏈接它們的服務(wù)器讀取信息并保存到數(shù)據(jù)庫。利用此技術(shù)正好消釋了在等待響應(yīng)時的瓶頸。
php模擬實現(xiàn)多線程的三種方法PHP語言本身是不支持多線程的.總結(jié)了一下網(wǎng)上關(guān)于PHP模擬多線程的方法,總的來說,都是利用了PHP的好伙伴們本身所具有的多線程才能.PHP的好伙伴指的就是LINUX和APACHE啦,LAMP嘛.另外,既然是模擬的,就不是真正的多線程.其實只是多進(jìn)程.進(jìn)程和線程是兩個不同的概念.好了,以下方法都是從網(wǎng)上找來的.1.利用LINUX操作系統(tǒng)
for$i=0;$i10;$i++
echo$i;
sleep5;
?上面存成test.php,然后寫一段SHELL代碼#!/bin/bash
foriin12345678910
do
php-qtest.php
done2.利用fork子進(jìn)程其實同樣是利用LINUX操作系統(tǒng)
declareticks=1;
$bWaitFlag=FALSE;///是否等待進(jìn)程終止
$intNum=10;///進(jìn)程總數(shù)
$pids=array;///進(jìn)程PID數(shù)組
echoStartn;
for$i=0;$i$intNum;$i++
$pids[$i]=pcntl_fork;///產(chǎn)生子進(jìn)程,而且從當(dāng)前行之下開試運(yùn)行代碼,而且不繼承父進(jìn)程的數(shù)據(jù)信息
if!$pids[$i]
//子進(jìn)程進(jìn)程代碼段_Start
$str=;
sleep5+$i;
for$j=0;$j$i;$j++$str.=*;
echo$i-.time.$strn;
exit;
//子進(jìn)程進(jìn)程代碼段_End
if$bWaitFlag
for$i=0;$i$intNum;$i++
pcntl_waitpid$pids[$i],$status,WUNTRACED;
echowait$i-.time.n;
echoEndn;
?3.利用WEBSERVER,PHP不支持多線程,A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026浙江紹興市經(jīng)濟(jì)作物技術(shù)推廣中心招聘編外人員1人考試參考題庫及答案解析
- 2026年齊齊哈爾建華區(qū)消防大隊政府專職消防員招聘11人考試備考題庫及答案解析
- 2026廣東佛山市高明區(qū)安通運(yùn)輸站場有限公司招聘1人考試備考試題及答案解析
- 大型供熱管網(wǎng)維護(hù)管理方案
- 2026濰坊市青州市宏德學(xué)校高薪誠聘學(xué)科骨干教師(78人)考試參考題庫及答案解析
- 樂山市教育局2026年直屬學(xué)校公開招聘足球教練員考試備考試題及答案解析
- 鼻部疾病經(jīng)濟(jì)影響評估-洞察及研究
- 臨界電流動態(tài)演化機(jī)制-洞察及研究
- 醫(yī)院縮短病人平均住院時長方案
- 2026楚雄市大過口鄉(xiāng)衛(wèi)生院招聘鄉(xiāng)村醫(yī)生(4人)考試參考試題及答案解析
- GB/T 30564-2023無損檢測無損檢測人員培訓(xùn)機(jī)構(gòu)
- 中華人民共和國汽車行業(yè)標(biāo)準(zhǔn)汽車油漆涂層QC-T484-1999
- 人教版九年級化學(xué)導(dǎo)學(xué)案全冊
- 國開電大商業(yè)銀行經(jīng)營管理形考作業(yè)3參考答案
- 陳獨(dú)秀早期社會建設(shè)思想的形成、淵源及啟迪,東方哲學(xué)論文
- GB/T 96.2-2002大墊圈C級
- GB/T 1865-2009色漆和清漆人工氣候老化和人工輻射曝露濾過的氙弧輻射
- GB/T 11945-2019蒸壓灰砂實心磚和實心砌塊
- 2023年自考高級財務(wù)會計真題和答案
- 2022年貴陽市法院書記員招聘筆試試題及答案解析
- 防水班日常安全教育登記表
評論
0/150
提交評論