在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

定時器實現原理——時間輪

xCb1_yikoulinux ? 來源:一口Linux ? 作者:一口Linux ? 2022-08-22 11:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

時間輪

時間輪算法是通過一個時間輪去維護定時任務,按照一定的時間單位對時間輪進行劃分刻度。然后根據任務延時計算任務落在該時間輪的第幾個刻度上,如果任務時長超出了刻度數量,則需要增加一個參數記錄時間輪需要轉動的圈數。

簡單時間輪

時間輪類似于我們的鐘表,當指針指到刻度上,我們就去執行對應的任務列表。例如,我們需要統計每個小時的登錄用戶數。

c513f47e-21c6-11ed-ba43-dac502259ad0.jpg

時間輪算法中,輪詢線程遍歷到某一個時間刻度后,總是執行對應刻度上任務隊列中的所有任務(通常是將任務扔給異步線程池來處理),而不再需要遍歷檢查所有任務的時間戳是否達到要求(不用每次從小頂堆堆頂,取數據來和時間比較,然后堆化這些操作)。

現在我們即使有n個任務,輪詢線程也沒有必要,每輪遍歷n次,我們只需要按照時間刻度來輪訓即可。

不過,小時作為時間單位粒度太大,我們有時候往往會希望基于分鐘、秒等作為時間刻度。最直接的方式是增加時間刻度,通過增加時間刻度,我們可以基于更精細的時間單位(分鐘)來進行定時任務的執行。但是,這種實現方式有如下的缺陷:

當我們刻度增多時,而任務相對較少,效率就會下降,假如我們只有以秒為刻度,一天 24 * 60 * 60 = 86400秒,我們可能只占用幾十或幾百個刻度,大部分時間刻度所占用的內存空間是沒有任何意義的。

round時間輪算法

我們發現,時間輪的時間刻度隨著時間精度而增加并不是一個好的問題解決思路。現在,我們將時間輪的精度設置為秒,時間刻度個數固定為 60。每一個任務擁有一個 round 字段。

輪詢線程的執行邏輯是:每隔一秒處理一個時間刻度上任務隊列中的所有任務,任務的 round 字段減 1,接著判斷如果 round 字段的值變為 0,那么將任務移出任務隊列,交給異步線程池來執行對應任務。如果是重復執行任務,那么再將任務添加到任務隊列中。

輪詢線程遍歷一次時間輪需要 60 秒。如果一個任務需要間隔 x 秒執行一次,那么其 round 字段的值為 x/60(整除),任務位于第 (x%60)(取余)個刻度對應的任務隊列中。例如任務需要間隔 130 秒執行一次,那么 round 字段的值為 2,此任務位于第 10 號時間刻度的任務隊列中。

c529e996-21c6-11ed-ba43-dac502259ad0.jpg

這種方式雖然簡化了時間輪的刻度個數,但是并沒有減少輪詢次數,效率還是相對較低。時間輪每次處理一個時間刻度,就需要處理其上任務隊列的所有任務。其運行效率甚至與基于普通任務隊列實現的定時任務框架沒有區別。

分層時間輪

分層的時間輪算法在生活中有對應的模型,那就是水表:

c52f8810-21c6-11ed-ba43-dac502259ad0.jpg

我們可以將一天類似水表一樣,分為多個輪,時、分和秒三個級別的時間輪,每一個輪的刻度分別為24、60、60個刻度。分層時間輪如下:

c5399ae4-21c6-11ed-ba43-dac502259ad0.jpg

假設我們有2個任務是每天的100執行一次,任務首先添加到時輪第1刻度上,當時輪到達第1刻度時,任務轉移到分輪上的第0刻度,當分輪達到第0刻度,任務轉移到秒輪,當秒輪達到第0刻度,任務一次執行。

優點:

輪詢效率變高:不需要計算round值,其次任務隊列中的任務一旦被遍歷,就是需要被處理的(沒有空輪詢問題);

線程并發好:雖然引入了并發線程,但是線程數僅僅和時鐘輪的級數有關,并不會隨著任務的增長而變多

分層時間輪的任務從一個時間輪轉移到另一個時間輪,有點像水表中小單位的表轉一圈進位到大單位一樣(但是分層時間輪是從大到小,因為從小到大的話,小單位的表輪詢判斷次數過多)

應用:

時間輪的使用在各大框架與中間件中有使用,xxl-job,netty都對時間輪都自己的實現。思路基本上與分層的時間輪策略一致。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4706

    瀏覽量

    95150
  • 定時器
    +關注

    關注

    23

    文章

    3298

    瀏覽量

    117667

原文標題:定時器實現原理——時間輪

文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    stm32H743定時器溢出的原因?怎么解決?

    我利用定時器更新中斷實現軟件計時,定時時間是固定的按照{10ms, 20ms,650ms, 50ms,50ms}周期性進行的。由于下一次的計時時間是需要在
    發表于 06-23 08:26

    MCU定時器/計數

    RISC-V核低功耗MCU通過靈活的定時器架構、低功耗模式適配及硬件級中斷優化,在工業控制、智能家居等場景中實現高精度計時與能耗控制的協同設計,滿足復雜任務調度與實時響應的雙重需求?。 一、?硬件
    的頭像 發表于 04-27 13:54 ?243次閱讀

    定時器已安排!開發小白看過來~

    本文將為您詳細介紹Air201定時器的基本操作與設置,確保您輕松上手,包教包會! 在Air201模組搭載的LuatOS系統中,定時器(timer)是一項基礎且關鍵的服務。 它允許開發者在特定的時間
    的頭像 發表于 12-31 14:30 ?420次閱讀
    <b class='flag-5'>定時器</b>已安排!開發小白看過來~

    詳解CKS32F107xx系列的定時器同步功能

    CKS32F107xx系列部分定時器在內部是相連的,可用于定時器同步或鏈接,方便用戶配置不同的同步模式,以便在電機控制、數據采集和PWM信號生成等應用中,實現復雜的時間序列和多通道的同
    的頭像 發表于 11-26 17:51 ?1012次閱讀
    詳解CKS32F107xx系列的<b class='flag-5'>定時器</b>同步功能

    請問PurePath Studio有定時器控件嗎?用AIC3254如何實現毫秒級的定時

    PurePath Studio有定時器控件嗎?用AIC3254如何實現毫秒級的定時
    發表于 10-25 07:26

    門頭燈定時器怎么調開關時間

    在現代商業環境中,門頭燈不僅是企業形象的一部分,也是吸引顧客的重要手段。然而,手動控制門頭燈的開關往往既耗時又容易出錯。為了解決這一問題,門頭燈定時器應運而生,它通過預設的時間表自動控制門頭燈的開關
    的頭像 發表于 10-17 14:14 ?3319次閱讀

    燈光定時器自動控制怎么調

    燈光定時器自動控制是一種智能家居設備,它允許用戶設定特定的時間來開啟或關閉燈光,從而實現節能和自動化控制。這種設備通常可以通過物理按鈕、遙控
    的頭像 發表于 10-17 14:13 ?3916次閱讀

    定時器自動控制開關怎么設置

    定時器自動控制開關是一種常見的自動化設備,廣泛應用于家庭、工業、農業等多個領域。通過定時器,用戶可以預設時間,讓設備在特定時間自動開啟或關閉,從而
    的頭像 發表于 09-19 16:19 ?3886次閱讀

    如何在MSP430?上實現內置振蕩的高精度定時器

    電子發燒友網站提供《如何在MSP430?上實現內置振蕩的高精度定時器.pdf》資料免費下載
    發表于 09-14 11:10 ?0次下載
    如何在MSP430?上<b class='flag-5'>實現</b>內置振蕩<b class='flag-5'>器</b>的高精度<b class='flag-5'>定時器</b>

    25G/28G重定時器與轉接驅動在常見應用中的最優化實現

    電子發燒友網站提供《25G/28G重定時器與轉接驅動在常見應用中的最優化實現.pdf》資料免費下載
    發表于 09-06 11:26 ?0次下載
    25G/28G重<b class='flag-5'>定時器</b>與轉接驅動<b class='flag-5'>器</b>在常見應用中的最優化<b class='flag-5'>實現</b>

    定時器的基本組成和工作模式

    定時器是計算機或電子設備中常見的一個硬件或軟件組件,其主要功能是測量和控制時間的流逝。它在各種應用中起著至關重要的作用,如操作系統調度、多媒體播放、網絡通信、工業自動化控制以及家電設備的定時功能等。
    的頭像 發表于 08-19 18:28 ?2701次閱讀

    555定時器能改進成哪些器件

    555定時器是一種廣泛使用的集成電路,它具有多種功能,如產生精確的時間延遲、振蕩、脈沖調制等。然而,隨著電子技術的發展,一些新型的器件和方法已經出現,可以改進555
    的頭像 發表于 07-17 09:16 ?833次閱讀

    定時器的工作方式介紹

    定時器是計算機和嵌入式系統中常見的一種硬件模塊,用于實現定時和計數功能。定時器的工作方式通常由一組寄存來控制,這些寄存
    的頭像 發表于 07-12 10:29 ?1906次閱讀

    定時器相關的寄存有哪些類型

    在微控制編程中,定時器是一種非常常見的功能模塊,用于實現各種定時和計數功能。定時器的工作原理是通過內部的計數
    的頭像 發表于 07-12 10:25 ?1658次閱讀
    主站蜘蛛池模板: 久久久久久久综合狠狠综合 | 在线观看视频一区二区三区 | 欧美一级在线观看播放 | 欧美jizz大又粗 | 好吊色37pao在线观看 | 欧美色欧美亚洲高清在线观看 | 亚洲第成色999久久网站 | 狠狠色噜噜狠狠狠狠91 | 日本一卡二卡3卡四卡网站精品 | caoporn成人免费公开 | 国内露脸夫妇交换精品 | 日本免费一级视频 | 特一级黄| 最新黄色地址 | 久久国模 | 一级一片免费播放 | 欧美成人精品福利网站 | 末满18以下勿进色禁网站 | 欧美亚洲一区二区三区在线 | 欧美色婷婷 | 三级三级三级网站网址 | 一区二区三区四区视频在线观看 | 丁香激情五月 | 久久精品国产精品亚洲婷婷 | 国产美女视频爽爽爽 | 国产人成高清视频观看 | 色综合天天综合网国产成人 | 亚洲最大的成人网 | 亚洲一级毛片免费看 | 国产精品成人一区二区三区 | 中文字幕三级久久久久久 | 俺要操 | 午夜不卡影院 | 亚洲人成网站色7799在线播放 | 美女被草视频 | 成人性生活免费视频 | 欧美经典三级春潮烂漫海棠红 | 97久久伊人精品影院 | 免费看你懂的 | 免费国产成高清人在线视频 | 国产小视频在线看 |