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

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

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

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

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

xCb1_yikoulinux ? 來源:一口Linux ? 作者:一口Linux ? 2022-08-22 11:47 ? 次閱讀

時(shí)間輪

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

簡單時(shí)間輪

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

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

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

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

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

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

round時(shí)間輪算法

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

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

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

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

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

分層時(shí)間輪

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

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

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

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

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

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

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

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

分層時(shí)間輪的任務(wù)從一個(gè)時(shí)間輪轉(zhuǎn)移到另一個(gè)時(shí)間輪,有點(diǎn)像水表中小單位的表轉(zhuǎn)一圈進(jìn)位到大單位一樣(但是分層時(shí)間輪是從大到小,因?yàn)閺男〉酱蟮脑挘挝坏谋磔喸兣袛啻螖?shù)過多)

應(yīng)用:

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

審核編輯 :李倩

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

    關(guān)注

    23

    文章

    4623

    瀏覽量

    93104
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3254

    瀏覽量

    115070

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    門頭燈定時(shí)器怎么調(diào)開關(guān)時(shí)間

    在現(xiàn)代商業(yè)環(huán)境中,門頭燈不僅是企業(yè)形象的一部分,也是吸引顧客的重要手段。然而,手動(dòng)控制門頭燈的開關(guān)往往既耗時(shí)又容易出錯(cuò)。為了解決這一問題,門頭燈定時(shí)器應(yīng)運(yùn)而生,它通過預(yù)設(shè)的時(shí)間表自動(dòng)控制門頭燈的開關(guān)
    的頭像 發(fā)表于 10-17 14:14 ?1069次閱讀

    定時(shí)器自動(dòng)控制開關(guān)怎么設(shè)置

    定時(shí)器自動(dòng)控制開關(guān)是一種常見的自動(dòng)化設(shè)備,廣泛應(yīng)用于家庭、工業(yè)、農(nóng)業(yè)等多個(gè)領(lǐng)域。通過定時(shí)器,用戶可以預(yù)設(shè)時(shí)間,讓設(shè)備在特定時(shí)間自動(dòng)開啟或關(guān)閉,從而實(shí)
    的頭像 發(fā)表于 09-19 16:19 ?1735次閱讀

    定時(shí)器的工作方式介紹

    定時(shí)器是計(jì)算機(jī)和嵌入式系統(tǒng)中常見的一種硬件模塊,用于實(shí)現(xiàn)定時(shí)和計(jì)數(shù)功能。定時(shí)器的工作方式通常由一組寄存來控制,這些寄存
    的頭像 發(fā)表于 07-12 10:29 ?1058次閱讀

    定時(shí)器相關(guān)的寄存有哪些類型

    在微控制編程中,定時(shí)器是一種非常常見的功能模塊,用于實(shí)現(xiàn)各種定時(shí)和計(jì)數(shù)功能。定時(shí)器的工作原理是通過內(nèi)部的計(jì)數(shù)
    的頭像 發(fā)表于 07-12 10:25 ?1028次閱讀

    長持續(xù)時(shí)間定時(shí)器電路圖 時(shí)間定時(shí)器的工作原理和功能

    的處理,都離不開定時(shí)器的精確控制。時(shí)間定時(shí)器通常由硬件和軟件兩部分組成,硬件部分通過計(jì)時(shí)芯片或計(jì)數(shù)
    的頭像 發(fā)表于 06-24 17:34 ?2132次閱讀
    長持續(xù)<b class='flag-5'>時(shí)間</b><b class='flag-5'>定時(shí)器</b>電路圖 <b class='flag-5'>時(shí)間</b><b class='flag-5'>定時(shí)器</b>的工作原理和功能

    時(shí)間繼電器與定時(shí)器的區(qū)別

    在工業(yè)自動(dòng)化和電子設(shè)備控制領(lǐng)域,時(shí)間繼電器和定時(shí)器是兩種常見的控制元件。它們都能夠實(shí)現(xiàn)電路的時(shí)間控制功能,但在設(shè)計(jì)原理、應(yīng)用場(chǎng)景、控制精度等方面存在顯著的差異。本文將對(duì)
    的頭像 發(fā)表于 06-21 18:18 ?1225次閱讀

    三菱PLC編程實(shí)現(xiàn)讀出時(shí)間定時(shí)器

    的功能,而定時(shí)器實(shí)現(xiàn)時(shí)間控制的關(guān)鍵組件。本文將詳細(xì)介紹如何使用三菱PLC編程實(shí)現(xiàn)讀出時(shí)間定時(shí)器。 1.
    的頭像 發(fā)表于 06-20 11:11 ?2603次閱讀

    三菱plc如何顯示定時(shí)器時(shí)間

    菱PLC中,定時(shí)器的顯示和設(shè)置是非常重要的,下面將詳細(xì)介紹如何顯示和設(shè)置三菱PLC的定時(shí)器時(shí)間。 一、定時(shí)器的基本概念 定時(shí)器的作用:
    的頭像 發(fā)表于 06-20 11:10 ?1966次閱讀

    三菱plc定時(shí)器范圍怎么設(shè)置

    三菱PLC(Programmable Logic Controller,可編程邏輯控制)是一種廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域的控制設(shè)備。在三菱PLC中,定時(shí)器是一種重要的編程元件,用于實(shí)現(xiàn)時(shí)間控制功能
    的頭像 發(fā)表于 06-20 11:04 ?2863次閱讀

    三菱FX系列PLC內(nèi)部定時(shí)器,定時(shí)時(shí)間單位有哪3種?

    三菱FX系列PLC是工業(yè)自動(dòng)化領(lǐng)域中常用的一種可編程邏輯控制,具有強(qiáng)大的功能和靈活性。在FX系列PLC中,定時(shí)器是一種非常重要的基本功能,用于實(shí)現(xiàn)各種時(shí)間控制任務(wù)。本文將詳細(xì)介紹三菱
    的頭像 發(fā)表于 06-20 10:29 ?4100次閱讀

    如何實(shí)現(xiàn)一個(gè)軟件定時(shí)器

    在Linux,uC/OS,F(xiàn)reeRTOS等操作系統(tǒng)中,都帶有軟件定時(shí)器,原理大同小異。典型的實(shí)現(xiàn)方法是:通過一個(gè)硬件定時(shí)器產(chǎn)生固定的時(shí)鐘節(jié)拍,每次硬件定時(shí)器中斷到,就對(duì)一個(gè)全局的
    的頭像 發(fā)表于 04-29 11:00 ?706次閱讀

    ?PLC定時(shí)器介紹

    定時(shí)器是PLC中重要的編程元件,是累計(jì)時(shí)間增量的內(nèi)部器件。大部分自動(dòng)控制領(lǐng)域都需要定時(shí)器進(jìn)行延時(shí)控制,靈活地使用定時(shí)器可以編制出復(fù)雜的控制程序。
    發(fā)表于 03-22 12:36 ?2517次閱讀
    ?PLC<b class='flag-5'>定時(shí)器</b>介紹

    使用555定時(shí)器的可調(diào)雙定時(shí)器電路

    等。使用555定時(shí)器IC的可調(diào)雙定時(shí)器電路項(xiàng)目也是555定時(shí)器IC的應(yīng)用之一。通過使用這個(gè)項(xiàng)目,人們可以一個(gè)接一個(gè)地切換兩個(gè)不同的設(shè)備,以調(diào)整時(shí)間(1分鐘到 10 分鐘)。
    的頭像 發(fā)表于 02-25 15:16 ?2324次閱讀
    使用555<b class='flag-5'>定時(shí)器</b>的可調(diào)雙<b class='flag-5'>定時(shí)器</b>電路

    定時(shí)器原理能控制馬達(dá)嗎為什么

    定時(shí)器原理可以用于控制馬達(dá)。馬達(dá)是一種將電能轉(zhuǎn)換為機(jī)械能的設(shè)備,通常由電動(dòng)機(jī)和傳動(dòng)裝置組成。定時(shí)器是一種電子設(shè)備,用來生成和計(jì)時(shí)精確而穩(wěn)定的時(shí)間信號(hào)。通過將定時(shí)器與馬達(dá)控制電路相連,可
    的頭像 發(fā)表于 01-23 15:21 ?698次閱讀

    時(shí)間定時(shí)器開關(guān)怎樣設(shè)置時(shí)間

    時(shí)間定時(shí)器是一種常見的設(shè)備,用于按照設(shè)定的時(shí)間自動(dòng)開關(guān)電器或進(jìn)行其他指定操作。通過設(shè)定定時(shí)器的開關(guān)時(shí)間,我們可以讓電器在特定的
    的頭像 發(fā)表于 01-16 16:32 ?4805次閱讀
    主站蜘蛛池模板: 久操免费视频| 爱情社保片鲁丝片一区| 一级美女片| 国产传媒在线观看视频免费观看| aaaa欧美高清免费| 久久这里只有精品免费视频| 四虎美女| 久久久精品免费| 黄色理伦| 天天干天天插天天| 越南黄色录像| ts人妖系列在线专区| 国产三级三级三级| 狠狠狠色丁香婷婷综合久久五月| 欧美激情亚洲色图| 色免费在线| 色伊人网| 天天摸天天碰中文字幕| 在线精品一区二区三区| 国产精品午夜自在在线精品| 视频一区 中文字幕| 亚洲视频一区二区在线观看| 黄色网址在线播放| 欧美性一区| 免费在线视频播放| 老师办公室高h文小说| 国产精品第一页在线观看| 亚洲精品自拍区在线观看| 亚洲免费人成在线视频观看| 在线免费视频国产| 色噜噜狠狠成人中文小说| 国产中出视频| 俺来色| 特黄一级视频| 奇米影视一区| 黄视频日本| 亚洲一区二区三区在线视频| 亚洲第一色视频| 久久男人网| a毛片基地免费全部香蕉| 日日操夜夜|