今天被問到乙個問題,php如何開啟多程序才比較穩定。
具體可以參考之前的文章:php的pcntl多程序
有個php程式,內部實現大概是
1
2
3
4
5
6
7
8
9
<?php
$starttime
= time();
while
(1)
// ... do something
}
意思是這個程式會持續10分鐘,10分鐘迴圈做這同乙個操作
然後開啟乙個cron:
1
*/2 * * * * /usr/local/bin/php ***.php
這個cron每兩分鐘跑乙個前面的php程式
這樣就能保證同時會有5個程式在do something。
首先當然有個do something的php程式:a.php
啟動乙個php父程序,在程式中使用exec:
1
2
3
4
5
<?php
for
(
$i
= 0;
$i
<
$count
;
$i
++)
這個方法當然也有很多變種,比如
1 第二個迴圈啟動的程式使用shell來做
2 第乙個do something的函式使用上個方法的持續程序
第一種使用pcntl的方法,感覺起來子程序「是受控制」的
意思就是父程序可以獲取處理子程序的輸出資訊,也可以等待子程序處理完以後做後續操作。
而後面兩種子程序是「不受控制」的。
ps:要想讓後面兩種子程序受控制,或許可以使用一些第三方儲存,比如日誌,比如redis等。
第二種和第三種方法,cron+php的方法,有種好處是不會出現長時間貯存記憶體中的程序。
由於php的底層實現很有可能導致記憶體洩漏,所以乙個「寫的不夠好」的php程式如果長時間一直執行,很有可能導致記憶體使用出現問題。所以不應該讓乙個php程式「長時間執行」。
第二三種方法,乙個程式執行完成之後就會立即結束程序,即使有記憶體洩漏也不會導致任何問題。所以比較讓人放心點。
ps:再說一下,方法一也不是必須要起常駐記憶體的程序,但往往我們做的時候會讓父程序常駐著。
還有啥呢,往往多程序的話要注意併發,可能會用到鎖之類的。因為一般要保證do something的原子性才行。
20131121工作安排及總結
今天來得還算早的,到公司只有8 40,但是,我還是看體育新聞到了現在,繼續控制時間,以後這些內容不要超過9 00,9點之後就應該進入工作狀態了,要不然,對不起提前上班這乙個小時。今天開始正式用咕咚運動跑步了,沒跑多久,算是開個頭吧,跑完後再回來,感覺很不錯,我度過了乙個很好的早晨,繼續,暫時目標是堅...
20110218 工作隨筆
2.今天突然發現前兩天js 中用 getjson的方法都沒辦法正確得到返回值,改為 ajax方法後正常,不知道是何原因 上網查了下挺多人碰到類似的情況 還需要再查 3.android模擬器模擬定位gps 以下未除錯成功,但把步驟先記錄下來再慢慢試 首先得允許location 操作,androidma...
2017 02 24工作隨筆
linux命令 1.軟體路徑加入到path中的 whereis mysql 檢視軟體檔案安裝目錄 which mysql 檢視執行檔案所在路徑 2.如果是原始碼安裝的話,你可以使用 prefix指定安裝路徑,這樣,你可以很輕鬆知道軟體的安裝路徑 3.如果是rpm包安裝的話,可以使用rpm qal查詢...