999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux下一種高性能定時器池的實現(xiàn)*

2012-08-13 08:13:26于鴻洋
電子技術應用 2012年12期
關鍵詞:用戶管理

許 健,于鴻洋

(電子科技大學 電子科學技術研究院,四川 成都 611731)

定時器(timer)是 Linux提供的一種定時服務的機制[1]。在使用定時器時,預先設置一個定時時間,并給定時時間到達時執(zhí)行預先設定的任務。目前Linux系統(tǒng)本身提供了多種用戶級定時器接口,其中精度較低的如Alarm函數(shù),精度為秒級,能夠滿足一些定時精度低的應用場合。但由于同一進程中不能同時調(diào)用多個Alarm函數(shù),因此應用場合有限。Setitimer克服不能重復使用的缺點,同時將精度提高到毫秒級,但是同一個進程中只能設置一個這種定時器。Timerfd是Linux為用戶程序提供的另一個定時器接口,這個接口基于文件描述符,能夠被用于select/poll的應用場景,其精度可以達到納秒級,是用戶空間高精度定時器的理想選擇。本設計的定時器池基于時間輪原理,設定一個時間片大小作為時間間隔的基本單位,將時間輪分為固定時間片數(shù),只需要一個Timerfd來管理該定時器池,設定超時時間間隔為時間片的大小,每次當超過一個時間片的時間時,系統(tǒng)將會通知定時器池的管理線程,管理線程做出相應的動作。綜合以上優(yōu)劣,本文提出一種定時器池的算法,用于管理大量定時器[2-3]。

1 設計原理以及工作流程

1.1 定時器池的結構

本定時器池選用Timerfd作為添加和刪除定時器的接口,使用Linux提供的函數(shù)timerfd_settime來設定定時的間隔時間大小。本定時器池的時間間隔為一個時間片time_slot大小。設定之后,管理線程等待系統(tǒng)的信號通知,系統(tǒng)每隔一個時間片就給定時器池發(fā)送一個信號,當收到此信號時,管理線程輪詢定時器池,查看池中是否有超時的定時器,若有則按用戶需求執(zhí)行相關動作。定時器池的結構如圖1所示。

當用戶想要添加或者刪除定時器時,可直接調(diào)用添加或者刪除函數(shù),定時器池內(nèi)部的管理線程將自動處理用戶的需求,將用戶所需的定時器加到定時器池相應的時間片鏈表中統(tǒng)一管理。定時器池中定時器的組織形式如圖2所示。

圖2 定時器池中的定時器組織形式

圖2中模擬了時間輪原理:用一個結構體來保存一個時間片,以時間片作為定時器粒度的最小單位,以及該時間片下定時器的數(shù)量,同時該結構體包含該時間片下的定時器鏈表的鏈表頭部,用來鏈接雙向鏈表,鏈表選用Linux內(nèi)核所采用的嵌入式雙向鏈表結構,如式(1)所示:

1.2 定時器的添加

用戶根據(jù)其需求在定時器池中加入定時器,插入定時器之前所要做的工作有:

(1)計算定時器插入時間片,每個定時器的插入時間片計算公式為:

式(2)中 timer為要插入的定時器結構,其中的 timer->slot為定時器插入的時間片,pool->cur_slot為定時器池當前所輪詢到的時間片,time->interval為所要添加的定時器的定時時間間隔,pool->time_slot為每個時間片的長度,pool->slot_num為定時器池的時間片總數(shù)。

(2)計算定時器的時間輪數(shù),每個定時器的時間輪數(shù)計算公式為:

其中的timer->round為該定時器的時間輪數(shù),通過式(3)得出定時器的時間輪數(shù)。

(3)用戶在添加定時器到定時器池中時,需要指定定時器的超時時間,以及超時時間到達后所需要執(zhí)行的函數(shù)。同時,必須指定該定時器是一次性定時還是周期性定時,以便管理線程刪除或者重新添加該定時器。

1.3 定時器池的工作流程

創(chuàng)建并初始化定時器池,此時內(nèi)存中保存著一個定時器池動態(tài)管理單元,用戶通過相應接口請求定時器池按其要求增加或者刪除定時器。定時器池工作流程如圖3所示。工作時,內(nèi)部的定時器管理線程一直監(jiān)聽用戶請求,同時管理線程等待系統(tǒng)的信號通知,當有信號通知到來時,管理線程輪詢定時器池,查看池中已有的定時器池中是否有超時的定時器,若有則按照用戶指定的動作來執(zhí)行。原因是:(1)可直接調(diào)用函數(shù),這種方法的優(yōu)點是不用產(chǎn)生線程的開銷;缺點是將占用定時器的時間,并且若該函數(shù)執(zhí)行時間較長,將嚴重影響定時器的性能。(2)產(chǎn)生線程來執(zhí)行該任務,這種方法的優(yōu)點是不占用定時器池的時間,缺點是需要產(chǎn)生線程開銷[4]。

管理線程還將檢查定時器的屬性,即該定時器是一次性定時還是周期性定時,如果是一次性定時,當定時器超時后,管理線程將該定時器從鏈表結構中移除;如果是周期性定時,當超時后,管理線程首先將定時器從鏈表結構中移除,然后計算該定時器池再次插入的時間片以及時間輪數(shù),得到以上數(shù)據(jù)后,按照時間片數(shù)將定時器重新插入到相應的鏈表中,實現(xiàn)用戶的需求。

1.4 定時器的刪除

當定時器時間到時,若為一次性定時,當定時器超時后,管理線程自動地將定時器從鏈表中移除,釋放相關內(nèi)存。但是,當用戶因為某種需要在中途刪除未超時的一次性定時器或者刪除周期性定時器時,此時需要調(diào)用定時器刪除函數(shù)來刪除定時器。但是從定時器鏈表中尋找特定的定時器并非一件容易的事情,本文采用基于紅黑樹的形式,相應的結構體設計如下:

圖3 定時器池工作流程圖

在添加定時器時,會給每個定時器分配一個唯一的id來標記定時器,該id存放在一張位圖表中,將以O(1)的速度索取未用的id或者存儲到期回收的定時器id。將該定時器id作為紅黑樹的鍵值key,將指向定時器的內(nèi)存結構指針作為紅黑樹的data數(shù)據(jù)。管理線程同時維護紅黑樹。當需要非正常刪除某個定時器時,通過定時器的id找出其在紅黑樹中的位置,獲取定時器結構在內(nèi)存中所在位置的指針,以便從定時器鏈表中刪除該定時器。紅黑樹的查找性能保持在O(logn),從而快速找出定時器指針所在紅黑樹的單元。

2 定時器池算法的實現(xiàn)

采用面向對象的思想,頭文件.h中只包含用戶可以查看到基本的結構,.c文件中包含實際的定時器池的內(nèi)部數(shù)據(jù)結構,這樣可以避免用戶操作結構體中的數(shù)據(jù)成員[7]。

2.1 定時器池的函數(shù)接口

定時器的結構數(shù)據(jù)如下:

2.2 定時器池的使用方法

其中的your_timer代表用戶想要添加的定時器,在該定時器結構中設置了當定時器超時后所要執(zhí)行的函數(shù)地址以及是用線程啟動執(zhí)行該函數(shù),或是直接調(diào)用啟動該函數(shù)。

3 性能測試

表1 定時器池對比測試結果

本定時器池使用雙向鏈表來管理各個定時器,每次輪詢所有時間片所鏈接的定時器鏈表下的定時器將占用一些系統(tǒng)時間,故定時器池的最小時間片應該大于輪詢鏈表中所有定時器的時間,以及到期的定時器執(zhí)行相關動作所需要的時間的總和,因此定時器池不能無限地加入定時器。對于一個給定的時間片大小,通過不斷對比測試可以找出該時間片大小下,定時器池中最佳的定時器數(shù)量,定時器池中定時器的數(shù)量最少不應少于5個,否則就與定時器池設計的初衷相左。

(1)測試環(huán)境: Intel(R)Core(TM)i3-2100 CPU@2.8 GHz,2 GB內(nèi)存;Fedora 14(內(nèi)核 2.6.35.14-106.fc14.i686)。

(2)測試設計:測試時采用時間片粒度分別為40 ms,80 ms、200。每次測試時,在系統(tǒng)尚未執(zhí)行 timer_pool->start前將定時器加入到定時器池中,在定時器池開啟后,立刻獲取當前時間,定時器超時后,觸發(fā)超時執(zhí)行函數(shù)獲取當時的時間,記錄保存。對于每個時間片都記錄兩組數(shù)據(jù),分別為定時器數(shù)目為 5個、10個,每個定時器的定時時間分別為定時器時間片大小的1~N倍,N代表定時器數(shù)目。測試的結果為某個時間片下定時器的相對誤差以及按時響應的概率,其中按時響應概率為準時響應的定時器個數(shù)占定時器總數(shù) (測試次數(shù)100次)的百分比,相對誤差代表前后兩次定時任務的絕對誤差的差值,體現(xiàn)定時器的穩(wěn)定性。每種情況測試100次,同時包括了本文90%以上的測試結果,并剔除了某些因為系統(tǒng)原因導致結果偏差太大的數(shù)據(jù)。定時器觸發(fā)方式分為部分周期性觸發(fā)、部分一次性觸發(fā),定時器超時后,超時執(zhí)行方式為直接調(diào)用執(zhí)行[5-7]。測試結果如表1所示。

由表1可見,當定時器池的時間片較小時,池中定時器數(shù)目越少,定時器池性能越好。隨著定時器數(shù)目的增加,管理線程輪詢所需要的時間可能會超過一個時間片的長度,造成定時器池在接收下一個時間片超時的信號延遲,從而導致定時器的性能急劇下降。從表1中可以看到,當定時器池時間片≥40 ms時,能夠較好地滿足性能需求。因此選擇該定時器池的時間片最小不能低于40 ms,并且定時器個數(shù)要控制在5個以內(nèi),否則定時器將不能保證及時被管理線程輪詢,從而影響定時器池的效率。另外,對于一些執(zhí)行時間特別長的執(zhí)行函數(shù),此時應該選用的執(zhí)行方式為線程執(zhí)行,即定時器到時后,產(chǎn)生一個線程來執(zhí)行超時執(zhí)行函數(shù)。如果執(zhí)行函數(shù)需要較長時間,則應選用線程方式執(zhí)行;如果時間相對較短,則可以采用直接調(diào)用方式,但前提是不能影響到定時器池的性能。

本文設計并實現(xiàn)了一種基于時間輪以及紅黑樹的定時器池算法,可方便用戶統(tǒng)一管理大量的定時器。對于定時器的添加、刪除、查找,以及輪詢等技術進行了細致地分析,提高了定時器池的響應速度,以滿足不同場合的需求。

[1]趙汝聰,謝維信.一種新的嵌入式Linux高性能定時器實現(xiàn)方法[J].信號處理,2009,25(3):439-443.

[2]趙紅武,金瑜,劉云生.一種改進的定時器實現(xiàn)算法及其性能分析[J].微計算機應用,2006,27(3):343-345.

[3]唐靚.Linux 2.6細粒度定時器的設計[J].電腦知識與技術,2009,36(5):10259-10261.

[4]晉磊,陳昌鵬,陳凱,等.Linux平臺下增強型定時器服務的研究[J].微型電腦應用,2005,21(11):41-43.

[5]林紹太,張會.Linux定時器及其在網(wǎng)絡安全中的應用[J].計算機系統(tǒng)應用,2004(10):63-64.

[6]楊焓,毛玉明.Linux用戶空間一種微秒級定時器的實現(xiàn)[C].2007中國西部青年通信學術會議,2007.

[7]STEVENS W R.UNIX網(wǎng)路編程(第 2卷)[M].北京:人民郵電出版社,2010.

猜你喜歡
用戶管理
棗前期管理再好,后期管不好,前功盡棄
加強土木工程造價的控制與管理
如何加強土木工程造價的控制與管理
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
“這下管理創(chuàng)新了!等7則
雜文月刊(2016年1期)2016-02-11 10:35:51
人本管理在我國國企中的應用
Camera360:拍出5億用戶
100萬用戶
主站蜘蛛池模板: 欧美成人日韩| 小蝌蚪亚洲精品国产| 国产91麻豆免费观看| 国产精品视频导航| 亚洲欧美另类专区| 91久久天天躁狠狠躁夜夜| 女人爽到高潮免费视频大全| 欧美高清三区| 精品国产三级在线观看| 久久窝窝国产精品午夜看片| 99久视频| 亚洲免费黄色网| 国产精品视频观看裸模| 青草精品视频| 暴力调教一区二区三区| 91无码国产视频| 日本伊人色综合网| 人妻无码AⅤ中文字| 国产美女丝袜高潮| 美女高潮全身流白浆福利区| 中文字幕日韩久久综合影院| 色视频国产| 综1合AV在线播放| 久久semm亚洲国产| 久久网欧美| 激情视频综合网| 幺女国产一级毛片| 久久久波多野结衣av一区二区| 国产精品观看视频免费完整版| 激情乱人伦| 国产成人无码久久久久毛片| 青青草原国产av福利网站| 亚洲永久色| 制服丝袜一区二区三区在线| 亚洲最大福利网站| 天堂av高清一区二区三区| 露脸国产精品自产在线播| 欧美精品在线观看视频| 久久精品一品道久久精品| 午夜国产理论| 国产美女免费网站| 91精品在线视频观看| 亚洲欧美极品| 韩日免费小视频| 拍国产真实乱人偷精品| 97视频在线观看免费视频| 久久国产拍爱| 五月婷婷导航| 国产成人久久777777| 久久无码av一区二区三区| 国产精品夜夜嗨视频免费视频| 亚洲成A人V欧美综合| 国产欧美日韩另类精彩视频| 天天激情综合| 精品久久777| 国产精品午夜福利麻豆| 91在线一9|永久视频在线| 国产精品亚洲综合久久小说| 亚洲av中文无码乱人伦在线r| 国产乱人伦偷精品视频AAA| 亚洲精品天堂自在久久77| 亚洲天堂久久久| 刘亦菲一区二区在线观看| 国产日韩精品欧美一区灰| 欧美a级完整在线观看| 国产免费好大好硬视频| 2021国产精品自产拍在线观看| 国产毛片高清一级国语| 搞黄网站免费观看| 一级成人a做片免费| 精品国产Av电影无码久久久| 狠狠色丁香婷婷综合| 久久综合色天堂av| 六月婷婷激情综合| 中文成人在线| 男人天堂伊人网| 国产超薄肉色丝袜网站| 中文字幕 日韩 欧美| 亚洲国产欧美自拍| 免费可以看的无遮挡av无码| 精品自窥自偷在线看| 亚洲精品中文字幕午夜|