日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

定時器實(shí)現(xiàn)原理——時間輪

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

掃碼添加小助手

加入工程師交流群

時間輪

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

簡單時間輪

時間輪類似于我們的鐘表,當(dāng)指針指到刻度上,我們就去執(zhí)行對應(yīng)的任務(wù)列表。例如,我們需要統(tǒng)計每個小時的登錄用戶數(shù)。

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

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

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

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

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

round時間輪算法

我們發(fā)現(xiàn),時間輪的時間刻度隨著時間精度而增加并不是一個好的問題解決思路?,F(xiàn)在,我們將時間輪的精度設(shè)置為秒,時間刻度個數(shù)固定為 60。每一個任務(wù)擁有一個 round 字段。

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

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

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

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

分層時間輪

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

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

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

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

假設(shè)我們有2個任務(wù)是每天的100執(zhí)行一次,任務(wù)首先添加到時輪第1刻度上,當(dāng)時輪到達(dá)第1刻度時,任務(wù)轉(zhuǎn)移到分輪上的第0刻度,當(dāng)分輪達(dá)到第0刻度,任務(wù)轉(zhuǎn)移到秒輪,當(dāng)秒輪達(dá)到第0刻度,任務(wù)一次執(zhí)行。

優(yōu)點(diǎn):

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

線程并發(fā)好:雖然引入了并發(fā)線程,但是線程數(shù)僅僅和時鐘輪的級數(shù)有關(guān),并不會隨著任務(wù)的增長而變多

分層時間輪的任務(wù)從一個時間輪轉(zhuǎn)移到另一個時間輪,有點(diǎn)像水表中小單位的表轉(zhuǎn)一圈進(jìn)位到大單位一樣(但是分層時間輪是從大到小,因?yàn)閺男〉酱蟮脑?,小單位的表輪詢判斷次?shù)過多)

應(yīng)用:

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

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4810

    瀏覽量

    98610
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3375

    瀏覽量

    124657

原文標(biāo)題:定時器實(shí)現(xiàn)原理——時間輪

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    LM555QML定時器:功能特性、應(yīng)用及設(shè)計要點(diǎn)

    LM555QML定時器:功能特性、應(yīng)用及設(shè)計要點(diǎn) 在電子設(shè)計領(lǐng)域,定時器是一種常用的器件,可用于生成精確的時間延遲或振蕩。TI公司的LM555QML定時器就是這樣一款高度穩(wěn)定的器件,下
    的頭像 發(fā)表于 02-10 15:40 ?346次閱讀

    深入解析xx555系列精密定時器:功能、應(yīng)用與設(shè)計要點(diǎn)

    深入解析xx555系列精密定時器:功能、應(yīng)用與設(shè)計要點(diǎn) 在電子工程師的工具箱中,定時器是一種至關(guān)重要的組件,它廣泛應(yīng)用于各種電子設(shè)備中,用于實(shí)現(xiàn)精確的時間控制。今天,我們將深入探討xx
    的頭像 發(fā)表于 02-10 15:40 ?995次閱讀

    探索xx555系列精密定時器:特性、應(yīng)用與設(shè)計要點(diǎn)

    探索xx555系列精密定時器:特性、應(yīng)用與設(shè)計要點(diǎn) 在電子設(shè)計領(lǐng)域,定時器實(shí)現(xiàn)精確時間控制和信號處理的重要元件。今天,我們將深入探討NA555、NE555、SA555、SE555這一
    的頭像 發(fā)表于 02-10 14:45 ?294次閱讀

    CW32定時器及其中斷介紹

    可以由硬件自 動執(zhí)行觸發(fā)信號的濾波操作,還能令觸發(fā)事件產(chǎn)生中斷和 DMA 請求。 低功耗定時器:CW32L083 內(nèi)部集成 1 個 16 位低功耗定時器(LPTIM),可以以很低的功耗實(shí)現(xiàn)
    發(fā)表于 01-14 06:42

    如何算定時器的溢出時間?

    怎么樣算定時器的溢出時間?
    發(fā)表于 01-13 07:09

    LAT1173高精度定時器的同步功能應(yīng)用筆記

    STM32G474 所含的高精度定時器(HRTIMER)其實(shí)包含了多個定時器,多個定時器之間可以單獨(dú)工作,也可以進(jìn)行同步,且高精度定時器還能與片上的其他
    發(fā)表于 01-11 17:32 ?0次下載

    實(shí)現(xiàn)一個嵌入式的軟件定時器

    操作系統(tǒng)中,都帶有軟件定時器,原理大同小異。典型的實(shí)現(xiàn)方法是:通過一個硬件定時器產(chǎn)生固定的時鐘節(jié)拍,每次硬件定時器中斷到,就對一個全局的時間
    發(fā)表于 12-10 08:29

    CW32定時器及中斷介紹

    可以由硬件自 動執(zhí)行觸發(fā)信號的濾波操作,還能令觸發(fā)事件產(chǎn)生中斷和 DMA 請求。 低功耗定時器:CW32L083 內(nèi)部集成 1 個 16 位低功耗定時器(LPTIM),可以以很低的功耗實(shí)現(xiàn)
    發(fā)表于 12-01 07:08

    使用系統(tǒng)定時器SysTick來實(shí)現(xiàn)精確延時微秒和毫秒函數(shù)

    到 0 時,將從RELOAD 寄存中自動重裝載定時初值,開始新一計數(shù)。使用內(nèi)核的SysTick定時器實(shí)現(xiàn)延時,可以不占用系統(tǒng)
    發(fā)表于 11-20 07:12

    PWM、定時器、SysTick 區(qū)別及應(yīng)用場景

    。下面我們來梳理清楚。一、基本概念定時器(Timer)MCU內(nèi)最基礎(chǔ)的計數(shù)外設(shè),通過計數(shù)時鐘周期實(shí)現(xiàn)定時、計數(shù)功能。多數(shù)MCU內(nèi)部有多個通用定時器,可配置為
    的頭像 發(fā)表于 11-17 10:53 ?720次閱讀
    PWM、<b class='flag-5'>定時器</b>、SysTick 區(qū)別及應(yīng)用場景

    硬件定時器如何配置固定頻率?

    ,非整數(shù)。 請教如果直接配置相應(yīng)頻率,不用換算時間。 另外“HWTIMER 設(shè)備”里面的計數(shù)頻率沒能理解有何作用,是否可以通過配置這個頻率來實(shí)現(xiàn)我要的頻率呢? 該如何換算,我嘗試修改好像對定時器
    發(fā)表于 09-26 07:12

    ?TLC551 LinCMOS? 定時器芯片技術(shù)文檔總結(jié)

    TLC551 是使用 TI LinCMOS 制造的單片定時電路^TM的^過程。這定時器與 CMOS、TTL 和 MOS 邏輯完全兼容,工作頻率高達(dá) 2 MHz。與 NE555 定時器相比,該器件由于輸入阻抗高,因此使用更小的
    的頭像 發(fā)表于 09-24 09:16 ?1057次閱讀
    ?TLC551 LinCMOS? <b class='flag-5'>定時器</b>芯片技術(shù)文檔總結(jié)

    SysTick系統(tǒng)滴答定時器簡介

    SysTick—系統(tǒng)定時器是屬于CM33內(nèi)核中的一個外設(shè),內(nèi)嵌在NVIC中。系統(tǒng)定時器是一個24bit的向下遞減的計數(shù),計數(shù)每計數(shù)一次的時間
    的頭像 發(fā)表于 09-23 09:50 ?1848次閱讀
    SysTick系統(tǒng)滴答<b class='flag-5'>定時器</b>簡介

    大彩講堂:VisualHMI-LUA教程-定時器的使用指南

    定時器的使用
    的頭像 發(fā)表于 08-31 16:59 ?1396次閱讀
    大彩講堂:VisualHMI-LUA教程-<b class='flag-5'>定時器</b>的使用指南

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

    我利用定時器更新中斷實(shí)現(xiàn)軟件計時,定時時間是固定的按照{(diào)10ms, 20ms,650ms, 50ms,50ms}周期性進(jìn)行的。由于下一次的計時時間是需要在
    發(fā)表于 06-23 08:26
    万盛区| 平安县| 辽中县| 温州市| 黔西| 宜城市| 延川县| 长泰县| 留坝县| 陆良县| 新宾| 八宿县| 达日县| 四川省| 香港 | 太原市| 清丰县| 安平县| 神木县| 阆中市| 栾城县| 雷山县| 鄂托克旗| 新蔡县| 三亚市| 香格里拉县| 成安县| 志丹县| 海盐县| 阳城县| 清镇市| 浦东新区| 永吉县| 蓬莱市| 隆昌县| 诸暨市| 依安县| 井冈山市| 高雄县| 翼城县| 卢湾区|