<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JTimer秒級定時任務管理

          聯(lián)合創(chuàng)作 · 2023-10-01 19:45

           基于thinkphp5_layui秒級定時任務管理

          jtimer使用了master-worker進程模型,能夠實現(xiàn)無阻塞執(zhí)行任務。

          時間表達使用了cron表達式,可精確到秒級,方便好用(比crontab多一位)

          安裝與使用

          項目要求:


          1. php.ini開放exec方法
          2. 安裝pcntl擴展
          3. 安裝posix擴展

          后臺部署

          項目后臺基于thinkphp5+layui實現(xiàn),部署方法參考thinkphp5官方文檔,此處不再闡述。

          數(shù)據(jù)庫文件位于項目根目錄 jtimer.sql,請自行導入

          默認用戶名密碼:admin/admin


          任務進程管理


          所有命令均在項目根目錄下執(zhí)行

          啟動進程:


           php think jtimer start

          停止進程:

          php think jtimer stop

          查看進程狀態(tài):


           php think jtimer status 或 ps aux | grep jtimer

          架構介紹

          cron表達式
           

          * * * * * *
          | | | | | |
          | | | | | ---- 星期(0-6)  
          | | | | ------ 月份(1-12)
          | | | -------- 日  (1-31)
          | | ---------- 時  (0-23)
          | ------------ 分  (0-59)
          |------------- 秒  (0-59) 


           

          進程模型

          簡單來說,就是兩個worker進程,1個負責數(shù)據(jù)的讀寫(讀任務,寫日志),1個負責任務的執(zhí)行(創(chuàng)建task進程執(zhí)行任務)。

          兩者之間通過tp框架自帶的文件緩存作為溝通的橋梁。

          Q1: 為什么要用兩個worker,而不是一個worker直接讀數(shù)據(jù)庫然后執(zhí)行任務?

          為了讓任務不阻塞,執(zhí)行每一個任務時都會創(chuàng)建一個新的task進程去執(zhí)行,task進程執(zhí)行完畢會退出。如果在worker進程使用了數(shù)據(jù)庫連接,那么fork出來的task進程會繼承worker進程的連接(共用一個數(shù)據(jù)庫連接),在task進程退出后,worker和task共用的連接也將被關閉,導致worker斷開數(shù)據(jù)庫連接。

          Q2:cron任務定時執(zhí)行是如何實現(xiàn)的?

          先解析任務的cron表達式得到該任務下次要執(zhí)行的具體時間,然后將該任務置于時間輪片(TimingWheel)中,worker進程每秒查看一次時間輪片,發(fā)現(xiàn)有要執(zhí)行的任務就取出來執(zhí)行。執(zhí)行完畢后再重復執(zhí)行上面的步驟。(關于TimingWheel,請自行百度)

          演示

          注意


          本項目只在測試環(huán)境運行過,如果要用于生產(chǎn)環(huán)境,請自行進行嚴格的測試后再投入使用。如有問題,自行負責。

          瀏覽 23
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产鸡巴免费看 | 成人夜视频 | 老熟妇久久久XXX预见频 | 影音先锋av伦理 影音先锋成人A片 | 精品久久免费一区二区三区 |