用過lar**el框架的童鞋都知道其自帶佇列功能,之前我很費解,php只是乙個指令碼,有超時機制
為什麼能不停的去執行佇列呢?
所以我就其原理說明一下
我們新建乙個檔案queue
<?phpwhile(true
)
然後中 命令列裡面 執行 php queue
你會發現每秒鐘輸出乙個1;等了很久,咦,很神奇,為什麼php沒有超時呢?
對,就是不會超時,why?
答:實際上php執行指令碼是不會超時的,我們在網頁中看到的諸如504等超時,是由apache,nginx,php配置檔案設定的超時時間決定的,因為php命令列執行檔案沒有使用php配置檔案,所以預設是不超時的。
ps -ef|grep php
會發現有乙個 php queue程序
php超時的疑惑我們解決了
再來看一下佇列的原理
新建乙個檔案 artisan
<?php$redis = new
redis();
$redis->connect('127.0.0.1',6379);
while(1)
sleep(1);
}
然後php artisan 執行佇列
我們來新建乙個視窗,進入redis客戶端輸入以下命令【不會redis的可以在我的部落格中找相關資料】
lpush listname a b c d e f g
會發現php artisan這個佇列會不斷的把redis裡我剛剛push進去的值打出來
其實lar**el的佇列就是這個原理,只不過,它不僅支援redis作為載體,還可以使用其他更多的資料庫
有人就要問了,我這php artisan啟動了,如果我把視窗關了不就沒用了嗎,
不不不,linux 還是可以在後台執行的
只要在命令後面加個 &
php artisan &
就可以啦
這些是php佇列的基本原理,當然我們還可以去執行物件的佇列及更複雜的情況,更多的請研究lar**el吧,由於筆者水平有限,不對的地方還望指正;謝謝
PHP實現佇列及佇列原理
看看各語言實現佇列的方法 php實現佇列 第乙個元素作為隊頭,最後乙個元素作為隊尾 佇列就是這麼簡單 link array array php j a array push array,python 入佇列 array shift array 出佇列 什麼是雙端佇列 或雙向佇列 deque,全名do...
php使用佇列 php實現佇列
佇列 queue 滿足先進先出 fifo 的規則 下面使用php實現乙個簡單的迴圈佇列模型 初始狀態的佇列,佇列長度為0,隊頭和隊尾的指標相同均位於佇列的開始 入隊操作 隊尾指標向後移動,長度加一 出隊操作 隊頭指標向後移動,長度減一 迴圈佇列特點 佇列大小固定,佇列所開闢的記憶體空間可迴圈使用,指...
php實現佇列
雙向佇列的實現 class doubleendedqueue public function push element public function pop public function inject element public function eject 例項化該類,測試下 a new d...