亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP定時器的說明

2020-03-22 19:30:31
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于PHP定時器的說明,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

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

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

原因

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

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

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

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

危險的做法

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

# test.phpset_time_limit(0); # 取消超時設置,讓腳本可一直運行echo This is a background run forever script. Now you can leave me alone. fastcgi_finish_request(); # 結束當前請求 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改成usleep、time_nanosleep,還能實現微秒、納秒級定時器,豈不美哉?

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

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

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

正確的姿勢

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

使用cron、Jenkins等調度工具做周期性定時任務(既可以是執行腳本,也可以是請求某個網址);

一次性執行任務通過消息隊列、數據庫等方式投遞給第三方程序執行;

像WordPress一樣模擬定時任務,但要記住這種方式依賴于客戶端請求,并需自行處理好進程并發問題;

使用常駐內存型方式運行PHP程序,即CLI模式。

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

CLI模式

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

使用swoole、workerman等框架,內置(高精度)定時器;

使用多進程(池)/多線程(池)技術(pcntl、pthreads拓展在CLI模式下才可用);

處理tick或者alarm等信號;

使用libevent、libev等事件驅動庫;

sleep加循環或自己實現事件循環。

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

總結

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

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

PHP的類修飾符與訪問修飾符

php簡單使用shmop函數創建共享內存減少服務器負載

以上就是PHP定時器的說明的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲男人天堂古典| 久热精品视频在线观看一区| 亚洲精品免费一区二区三区| 96国产粉嫩美女| 日韩极品精品视频免费观看| 亚洲第一色在线| 国产精品91久久久| 亚洲欧美日韩天堂| 97精品视频在线| 亚洲护士老师的毛茸茸最新章节| 亚洲视频电影图片偷拍一区| 九九九热精品免费视频观看网站| 久久久999精品免费| 亚洲老头同性xxxxx| 亚洲二区中文字幕| 久久久综合av| 欧美激情小视频| 亚洲精品中文字幕有码专区| 亚洲成色777777在线观看影院| 成人精品一区二区三区电影免费| 久久久久国产精品一区| 欧美亚洲视频在线看网址| 高跟丝袜欧美一区| 国产成人精品综合久久久| 欧美专区在线视频| 日韩视频免费看| 色多多国产成人永久免费网站| 欧洲一区二区视频| 欧美制服第一页| 欧美亚洲视频在线看网址| 国产在线日韩在线| 久久久国产精品视频| 日韩欧美在线字幕| 97香蕉久久超级碰碰高清版| 国产精品色视频| 久久久精品免费| 亚洲香蕉伊综合在人在线视看| 成人两性免费视频| 国产精品欧美风情| 美女撒尿一区二区三区| 久久伊人精品天天| 国产精品亚洲网站| 久久国产精品免费视频| 欧洲精品在线视频| 91在线观看免费观看| 精品毛片三在线观看| 久久91亚洲精品中文字幕| 国产亚洲精品激情久久| 一区二区成人av| 国产精品美女无圣光视频| 日本一区二三区好的精华液| 国产精品高清在线观看| 青草成人免费视频| 伊人久久男人天堂| 日韩精品极品视频免费观看| 日韩在线观看免费高清完整版| 日韩视频在线免费观看| 成人激情在线播放| 一区二区三区美女xx视频| 色综合久久中文字幕综合网小说| 成人春色激情网| 亚洲免费av电影| 97精品在线视频| 国内精品久久久久久中文字幕| 国产精品久久久久久av福利软件| 日韩电影中文字幕| 国产精品亚洲网站| 精品亚洲夜色av98在线观看| 亚洲高清久久久久久| 欧美亚洲日本黄色| 久久久久久久久久av| 狠狠色狠狠色综合日日五| 久久久久久久久久av| 久久久久久欧美| 日韩小视频在线观看| 久久久久一本一区二区青青蜜月| 欧美黄色免费网站| 国产综合在线观看视频| 久久久国产在线视频| 欧美国产一区二区三区| 国产精品草莓在线免费观看| 国产亚洲日本欧美韩国| 久久精品免费电影| 国产精品三级久久久久久电影| 5252色成人免费视频| 国产在线视频欧美| 欧美裸体视频网站| 在线不卡国产精品| 国产成人亚洲综合91精品| 久久成人18免费网站| 亚洲欧美国产另类| 欧美小视频在线观看| 国产综合视频在线观看| 自拍偷拍亚洲在线| 国产99久久精品一区二区 夜夜躁日日躁| 中文字幕日韩免费视频| 国产小视频国产精品| 色综合视频一区中文字幕| 日韩国产欧美精品在线| 伊人久久精品视频| 高清在线视频日韩欧美| 国产主播精品在线| 国产精品一区二区久久久久| 91免费福利视频| 欧美激情一区二区三区在线视频观看| 91成人天堂久久成人| 欧美成人精品在线视频| 亚洲欧美另类中文字幕| 欧美成年人在线观看| 久久综合伊人77777| 国产精品18久久久久久麻辣| 国产日本欧美一区| 丝袜亚洲欧美日韩综合| 成人免费视频在线观看超级碰| 国产精品视频一| 亚洲天堂av在线免费| 午夜精品一区二区三区在线视频| 91在线免费网站| 国产91在线播放九色快色| 国产精品一二三在线| 久久男人资源视频| 狠狠综合久久av一区二区小说| 欧美高清自拍一区| 亚洲欧美日韩中文在线制服| 欧美日本在线视频中文字字幕| 国产精品高清在线| 国产精品日韩在线播放| 精品久久久久久久大神国产| 91精品国产综合久久久久久久久| 久久九九免费视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品综合网站| 国产精品自产拍在线观| 国产欧美日韩视频| 欧美大片网站在线观看| 91欧美激情另类亚洲| 亚洲va国产va天堂va久久| 国产欧美日韩免费| 精品毛片网大全| 亚洲天堂成人在线视频| 伊人久久综合97精品| 亚洲欧美激情在线视频| 少妇高潮久久久久久潘金莲| 成人久久久久爱| 国产日韩精品综合网站| 久久精品成人欧美大片古装| 亚洲欧美一区二区激情| 欧美视频精品一区| 欧美精品videosex极品1| 美女福利精品视频| 国产不卡一区二区在线播放| 91精品91久久久久久| 欧美最猛性xxxxx(亚洲精品)| 亚洲一区中文字幕在线观看| 4444欧美成人kkkk| 亚洲成av人片在线观看香蕉| 亚洲图片欧洲图片av| 中文字幕亚洲欧美在线| 欧美成人免费大片| 国产精品一区久久久| 国产精品视频最多的网站| 5566成人精品视频免费| 一本久久综合亚洲鲁鲁| 精品av在线播放|