gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

聊聊關于PHP定時器的那些事

常見的定時器有兩種:一種周期性定時執行,例如每天的凌晨三點出報表;另一種在指定時間后執行(一次),例如會員登錄系統五分鐘后發放每日登錄獎勵。兩種情況對應shell中的cronat命令,與JavaScript中的setIntervalsetTimeout函數類似(嚴格來說setInterval是周期性執行,指定時間點執行需要自行處理)。

做web開發的PHP程序員對JavaScript中的兩個定時器函數應該都還熟悉,回到PHP層面就有點傻眼:PHP中有sleep,但是沒有(內置)定時器函數可用。sleep函數勉強可以做到,但會導致進程阻塞,期間不能做其他事(或無響應)。為什么PHP沒能提供定時器(Timer)這個功能呢?

原因

個人認為,web開發中PHP不能使用定時器的本質原因是可控 常駐內存運行環境的缺失。兩個要點:第一常駐內存,第二可控。CGI模式下,進程執行完腳本后直接退出,不能指望其到指定時間運行任務;PHP-FPM模式下,進程(絕大多數)常駐內存,但不可控。

不可控的意思是執行PHP的進程不受PHP代碼影響,進程的入口點和退出時機由額外的程序控制。例如FPM模式下,PHP腳本中的exitdie函數只中斷腳本的執行,不會對執行腳本的進程產生特別的影響(內存泄露除外)。PHP開發人員編寫的腳本是進程的執行體,執行完畢后就從進程的執行上下文中卸載出去。這種情況下,執行PHP腳本的時機仍然由外部驅動,沒有外部請求PHP代碼就安詳的躺在硬盤上,什么都不做,也就定時任務。

由于PHP主要面向web開發,PHP這種執行模式穩定可靠,開發效率快。比如省去資源釋放這一步,就避免了開發中很多工作量和坑。想想某些第三方庫代碼中改時區、字符編碼等還不還原,在常駐內存運行環境下幾乎肯定會導致后續請求有問題。但在FPM模式下,這種坑無意中直接趟平,省去許多調試時間,為程序員保住發際線做出了不小的貢獻。

問題已經了解,那么PHP中如何使用定時器執行定時任務?

危險的做法

在web環境下,PHP腳本默認有超時時間。去掉超時設置,就可以讓程序一直在后臺運行(如果進程不退出的話)。例如以下代碼在響應請求后繼續后臺運行,并且每五秒鐘輸出一次時間到文件:

# test.php set_time_limit(0); # 取消超時設置,讓腳本可一直運行  echo 'This is a background run forever script. Now you can leave me alone.';  fastcgi_finish_request();   # 結束當前請求  do{    file_put_contents("/tmp/out.dat", "test script, now:" . date("Y-m-d H:i:s") . "n", FILE_APPEND);    sleep(5); }while(true);

請求http://localhost:8080/test.php文件后,監測/tmp/out.dat文件,會發現不斷有內容輸出,無論客戶端是否斷開連接、關閉瀏覽器或者重啟電腦(不能重啟服務器)。這說明程序一直在執行,并且也實現了我們想要的定時器功能。如果把sleep改成usleeptime_nanosleep,還能實現微秒、納秒級定時器,豈不美哉?

實踐中應當盡量避免用這種方式實現定時器,不僅因為低效,還略有危險。原因之一是每次請求會占用一個進程,請求十萬次需要十萬個進程,基本上會導致系統崩潰或后續請求無響應;另外如果打開了session,但是忘記調用session_write_close,會導致同一個用戶的后續請求被hang住(session活躍時處于加鎖狀態,不關閉session會導致后續進程無法打開session)。

web開發應當越快響應用戶的請求越好,在web開發中用這種方式強行實現定時器,會讓整個web應用處于不穩定、不可靠或不可預測狀態。孟子曰:知而慎行,君子不立于危墻之下。不靠譜的做法要盡量避免,順帶也避免背鍋和甩鍋。

接下來看看PHP中使用定時器的正確姿勢。

正確的姿勢

PHP實現定時器的做法可簡單歸結為如下幾種:

  1. 使用cron、Jenkins等調度工具做周期性定時任務(既可以是執行腳本,也可以是請求某個網址);
  2. 一次性執行任務通過消息隊列、數據庫等方式投遞給第三方程序執行;
  3. 像WordPress一樣模擬定時任務,但要記住這種方式依賴于客戶端請求,并需自行處理好進程并發問題;
  4. 使用常駐內存型方式運行PHP程序,即CLI模式。

除了第三種做法,其他方式都是推薦的,具體方案請結合實際需求。作為PHP程序員,當然還是首選用PHP來做,也就是CLI模式。

CLI模式

摸著良心說,CLI模式讓PHP發揮的空間拓展不少。在CLI模式下,程序的入口點就是腳本,且代碼可以常駐內存,進程完全由PHP代碼控制。在這種形式下,實現定時器就有多種玩法。本文列出幾種做法,拋磚引玉:

  1. 使用swooleworkerman等框架,內置(高精度)定時器;
  2. 使用多進程(池)/多線程(池)技術(pcntlpthreads拓展在CLI模式下才可用);
  3. 處理tick或者alarm等信號;
  4. 使用libeventlibev等事件驅動庫;
  5. sleep加循環或自己實現事件循環。

想折騰的話自己用2-5方案,不想折騰swooleworkerman等框架是首選,穩定可靠。

總結

區分HTTP請求和任務的關系,實現定時任務就簡單了。至于用不用PHP來實現,那是另外一回事。當然作為web開發的首選語言,PHP實現定時任務也是輕而易舉的。

推薦學習:《PHP視頻教程》

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
丰满人妻一区二区三区53号| 中文字幕无码不卡免费视频| 两根大肉大捧一进一出好爽视频| 国产一级片自拍| 久久久无码中文字幕久...| 国产亚洲天堂网| a级片一区二区| 视频在线观看免费高清| 内射国产内射夫妻免费频道| 日韩精品一区二区三区电影| 丝袜制服一区二区三区| 国产 日韩 亚洲 欧美| 久久综合亚洲精品| 色噜噜狠狠一区二区三区狼国成人| 国产精品久久国产| 懂色av粉嫩av蜜臀av| 一本一道久久a久久综合蜜桃| 黄页网站大全在线观看| 青草网在线观看| 久久久久福利视频| 熟女熟妇伦久久影院毛片一区二区| 国产av无码专区亚洲精品| 超碰免费在线公开| 精品亚洲视频在线| 中文字幕精品一区二区三区在线| 亚洲精品午夜在线观看| 美女在线视频一区二区| 三上悠亚在线一区二区| 91插插插插插插插插| 精品视频一区二区在线| 久久久久久久久久久久久久国产| www在线观看免费| 精品人妻一区二区三区四区在线| 免费无码毛片一区二三区| 国自产拍偷拍精品啪啪一区二区| 六月丁香激情网| 午夜视频在线瓜伦| 日本久久久久久久久久久久| 奇米影视四色在线| 欧美h视频在线观看| 国产青草视频在线观看| 黄色一级视频片| av网址在线观看免费| 三级a在线观看| 亚洲综合伊人久久| 欧美狂野激情性xxxx在线观| 欧美久久久久久久久久久久久| 凹凸国产熟女精品视频| www.99在线| 日本三级中文字幕在线观看| 国产主播自拍av| 污污视频网站免费观看| 五月天色婷婷综合| 欧美一级免费播放| 一级做a免费视频| 99久热在线精品视频| 十八禁视频网站在线观看| 午夜剧场高清版免费观看| 国产盗摄视频在线观看| 草草草在线视频| 91精品国产毛片武则天| 麻豆av免费在线| 精品视频在线观看一区二区| 男的插女的下面视频| 亚洲欧美日本一区二区三区| 成人午夜视频在线观看免费| 99视频在线视频| 丁香婷婷综合激情| 爱爱爱爱免费视频| 一本久道高清无码视频| 亚洲视频在线不卡| 麻豆av免费在线| 香蕉视频禁止18| 色悠悠久久综合网| 久久综合久久色| www.av毛片| 三级视频中文字幕| 国产毛片久久久久久| 男人添女人荫蒂免费视频| 久久撸在线视频| 日本三区在线观看| 欧美深夜福利视频| 男人天堂a在线| 日本精品www| 男人添女人下部视频免费| 国产乱人伦精品一区二区三区| 亚洲小视频网站| 一区二区三区日韩视频| 中文字幕日韩综合| 亚洲美女自拍偷拍| 一本之道在线视频| 国产h视频在线播放| 成人黄色片视频| 国产麻豆电影在线观看| 久久久久久久久久久久久久国产| 一级片免费在线观看视频| 欧美a级免费视频| 一级黄色高清视频| 无限资源日本好片| 亚洲一级片网站| 蜜臀一区二区三区精品免费视频| 免费成人深夜夜行网站视频| 中文字幕一区久久| 一本—道久久a久久精品蜜桃| 蜜桃福利午夜精品一区| 精产国品一二三区| 亚洲第一综合网站| 黄色一级片在线看| 国产成人黄色片| 亚洲激情在线观看视频| 91制片厂毛片| 一区中文字幕在线观看| 激情五月六月婷婷| 日韩伦理在线免费观看| www.亚洲天堂网| 一区二区三区欧美精品| 青青草综合视频| 免费av观看网址| 99sesese| 2018国产在线| 爱情岛论坛成人| 日本福利视频网站| 成年网站在线免费观看| 天天爽人人爽夜夜爽| 国产在线视频三区| 欧美牲交a欧美牲交aⅴ免费下载| 不卡的av中文字幕| 日本手机在线视频| 中文字幕66页| 国产极品在线视频| 国产精品中文久久久久久| 国产免费黄色av| 在线观看中文av| 欧美精品第三页| 狠狠精品干练久久久无码中文字幕| 东北少妇不带套对白| 天天干天天操天天做| 日本国产在线播放| 青娱乐国产精品视频| 无遮挡又爽又刺激的视频| 一区二区三区四区免费观看| 一本久道中文无码字幕av| 成人在线视频一区二区三区| 精品亚洲一区二区三区四区| 黄页网站大全在线观看| 久久久久亚洲av无码专区喷水| 粉嫩虎白女毛片人体| 婷婷无套内射影院| 亚洲黄色网址在线观看| 亚洲美女性囗交| 女人另类性混交zo| 少妇大叫太大太粗太爽了a片小说| 久久国产激情视频| 亚洲熟妇av一区二区三区| 无码粉嫩虎白一线天在线观看| 蜜桃视频成人在线观看| 91小视频网站| 熟妇人妻无乱码中文字幕真矢织江| 欧美成人免费在线观看视频| www国产免费| 青青在线免费视频| 日韩精品视频网址| 91香蕉视频在线观看视频| www.超碰97.com| 五月天婷婷亚洲| 日韩一级性生活片| www.射射射| 成人毛片一区二区| 久久国产精品视频在线观看| 免费一级特黄毛片| 久久亚洲国产成人精品无码区 | 中文字幕亚洲欧洲| 日本特黄a级片| 亚洲视频一二三四| 992tv人人草| 国产精品88久久久久久妇女| av动漫在线播放| 免费极品av一视觉盛宴| 久久久99精品视频| 国产91在线免费| 国产裸体免费无遮挡| 久久久久国产一区| 中文字幕在线视频一区二区三区 | 亚洲涩涩在线观看| 吴梦梦av在线| 波多野结衣综合网| 日本xxxxxxx免费视频| 中文字幕免费高清在线| 在线观看污视频| 无码aⅴ精品一区二区三区浪潮 | 黑森林精品导航| 国产人妻互换一区二区| 日本一道本久久| 五月婷婷六月合| 蜜臀精品一区二区| 黄色片在线免费| 亚洲国产精品无码观看久久| 欧美 日韩 国产 激情| 黄色污污在线观看| 97在线免费公开视频|