亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        通用線程模型研究

        2014-11-28 13:22:34王靖WANGJing楊成YANGCheng
        價值工程 2014年26期
        關鍵詞:分派線程隊列

        王靖WANG Jing;楊成YANG Cheng

        (①北京信息職業(yè)技術學院信息工程系,北京 100018;②北京星網(wǎng)銳捷網(wǎng)絡技術有限公司,北京 100082)

        (①Department of Information Engineering,Beijing Information Teconology College,Beijing 100018,China;②Beijing Star-net Communication Co.,Ltd.,Beijing 100082,China)

        0 引言

        在現(xiàn)代應用程序中,為了用戶界面的更加友好,程序運行的更加流暢,使用多線程進行任務的處理已經(jīng)是主流的選擇。但是多線程程序開發(fā)中,我們往往會遇到以下問題:

        ①在訪問共享的數(shù)據(jù)時,使用加鎖方式實現(xiàn)。但這種方式在程序規(guī)模增長到一定程度后,會不可避免地帶來程序的低效、死鎖等問題。②簡單地為每個耗時的任務創(chuàng)建一個線程;這種模式首先造成資源的浪費,其次當大量線程被創(chuàng)建出后,會耗盡系統(tǒng)的資源從而導致系統(tǒng)變慢或死機;即使是正常關閉,大量線程在關閉時的等待也將是一個漫長的過程。③任務執(zhí)行完后,通過回調(diào)通知發(fā)起者任務,但可能發(fā)起者已被銷毀,從而導致程序的崩潰。

        采用線程模型,及約定開發(fā)人員以事先制定的模式工作,能避免上述問題。線程模型的設計目標概括為以下幾點:

        ①除了在線程模型的管理和調(diào)度模塊,整個應用程序避免使用任何形式的鎖。這樣能避免程序低效、死鎖等問題。②線程模型應提供能動態(tài)調(diào)整的線程池來執(zhí)行用戶提交的任務。③線程模型應提供統(tǒng)一的接口讓用戶提交任務、設定定時任務、設定任務過期條件、取消任務、存儲任務和提供回調(diào)等,避免在每個模塊做同樣的工作。④合理調(diào)度任務,保證共享數(shù)據(jù)的安全。⑤線程模型應管理每個服務和回調(diào)的生命周期,使應用

        程序避免崩潰。

        如圖1 所示,用戶任務通過線程模型接口提交,提交過程是異步的,可立即返回;任務通過線程模型接口,添加到服務存儲和管理隊列;任務分派程序會選擇合適的任務提交到線程池中,執(zhí)行用戶的任務,完成時調(diào)用回調(diào)函數(shù);通過生命周期管理,當回調(diào)的對象銷毀時,自動取消回調(diào)。

        圖1 線程模型圖示

        1 線程模型的組成部分及其功能

        一個完整的線程模型至少應包含以下組成部分:

        ①線程模型接口;②任務存儲和調(diào)度線程的管理;③任務的分派;④線程池的管理;⑤線程模型的輔助設施。

        1.1 線程模型的接口

        1.1.1 創(chuàng)建線程模型管理 線程管理模塊在主程序入口處被創(chuàng)建。確保用戶的各個模塊都能調(diào)用到線程模型的各種接口。

        1.1.2 銷毀線程模型管理 線程管理模塊在主程序出口處被銷毀。銷毀時,線程管理模塊保證正在被執(zhí)行的任務執(zhí)行完,同時取消正在隊列中等待的所有任務。

        1.1.3 添加一個新的任務 線程模型提供輔助設施來協(xié)助用戶創(chuàng)建任務。任務將有6 個屬性:command,callback,task_id,group_id,priority 和timeout。

        1.1.4 設定任務分組 如果有些任務需要訪問共享的數(shù)據(jù),這些任務將按順序被放入線程池執(zhí)行,避免多線程同時訪問共享數(shù)據(jù)。通過給這些任務賦予相同的ID,任務分派模塊就會自動的將相同ID 的任務順序放入線程池。

        1.1.5 設定任務回調(diào) 任務回調(diào)在任務執(zhí)行完成后被工作線程調(diào)用,回調(diào)過程如需線程切換,可通過線程模型的輔助設施來實施。

        1.1.6 設置任務優(yōu)先級 每項任務都有自己的優(yōu)先級,高優(yōu)先級的任務將優(yōu)先被放進線程池執(zhí)行。

        1.1.7 任務超時 有的任務會有一個執(zhí)行的期限,如超過這個期限,回調(diào)函數(shù)將被執(zhí)行。

        1.1.8 取消任務 用戶發(fā)起任務后,在等待任務執(zhí)行的過程中,可能需要取消任務。此時,如任務在等待的隊列中,任務將被刪除。如任務已在線程池中被執(zhí)行,則斷開該任務連接的回調(diào)函數(shù)。

        1.1.9 重試任務 在某個任務失敗后,回調(diào)函數(shù)會通知用戶此次執(zhí)行失敗和失敗的原因。用戶可通過重試該項任務,重新將任務發(fā)送到存儲隊列中等待執(zhí)行。

        1.1.10 預約任務 用戶希望在一段時間后啟動某些項任務,需要接口支持預約任務。

        1.2 任務存儲和調(diào)度線程的管理

        1.2.1 任務及其回調(diào)的存儲 采用多索引容器(boost::multi_index_container)形式來存儲任務,同時按照task id,priority 和group id 為任務建立不同的索引。這樣,不但在查找相應任務時效率更高,而且也保證了插入或者刪除數(shù)據(jù)時候的效率。[1]

        1.2.2 任務管理及回調(diào) ①由于用戶可能在任意的線程調(diào)用線程模型,來添加希望的服務。為避免本文開始提到的對共享數(shù)據(jù)加鎖的問題,需將任務的添加工作切換到任務管理線程執(zhí)行。②維護用戶任務的狀態(tài),Scheduling,Pending or Processing 也需在管理線程進行。③在回調(diào)發(fā)生的時候,需移除相應任務并觸發(fā)用戶預先設定的回調(diào)?;卣{(diào)必須在管理線程中執(zhí)行,需檢查管理線程中該任務是否被取消。④用戶可能不斷添加新任務,線程池會添加任務完成的事件到管理線程。同時,用戶可能會取消之前添加的任務。以上操作會影響到共同數(shù)據(jù),因此必須按順序執(zhí)行。但這樣會導致大量添加新任務的操作,導致分派任務一直無法得到執(zhí)行;在這種情況下,管理線程一直處于忙碌狀態(tài),但是線程池卻處于空閑狀態(tài)。因此,對于不同的任務的添加,也需設定優(yōu)先級。一般來說,完成任務的優(yōu)先級設為Medium,用戶取消任務的優(yōu)先級設為High,而添加任務的優(yōu)先級設定為Low。

        1.2.3 防止任務無限制占據(jù)線程 對線程模型來說,用戶創(chuàng)建的任務是不可控的。因此,會發(fā)生由于用戶任務錯誤導致線程池的線程進入死循環(huán),使得線程喪失繼續(xù)服務的能力。線程調(diào)度管理程序如不能及時發(fā)現(xiàn)死去的線程,將有可能導致線程池所有線程被占用,從而導致用戶所有任務均無法執(zhí)行。一般可以記錄上次該線程回調(diào)發(fā)生的時間。如超過指定時間范圍而無響應,可強制該線程關閉后重啟或者關閉相應任務,并重新添加線程到線程池。

        1.2.4 定時器組件 為實現(xiàn)用戶預約任務,必須實現(xiàn)Timeout 部件,并在到期時,將回調(diào)的執(zhí)行過程控制在管理線程中。實踐中,可考慮用Boost::asio::deadline_timer。

        1.2.5 內(nèi)存池的管理 當?shù)却蝿斩鄷r,增加線程池中線程的數(shù)量。當?shù)却犃泻苌倩驗榭諘r,減少線程數(shù)量。增加減少不宜太頻繁。一般根據(jù)一段時間內(nèi)處理的任務數(shù)來決定開啟的線程數(shù)。

        1.2.6 任務回調(diào)的生命周期管理 對于回調(diào)任務,一般需做兩件事。第一,確?;卣{(diào)發(fā)生在指定線程。這一點,1.4 節(jié)將會專門講述。第二,確?;卣{(diào)所依賴的對象存在;如所依賴的對象已被銷毀,那么就取消該回調(diào)。實現(xiàn)可采用boost::signal 模式,只要求回調(diào)所依賴的目標對象從boost::signals::trackable[2]派生即可。

        1.3 任務的分派 任務的分派需要遵循以下原則:

        ①分派單元的運行需確保在任務管理線程中執(zhí)行。②分派單元按優(yōu)先級取任務,放入隊列中執(zhí)行。③如果標記為某個group id 的任務已在線程池中運行,那么該任務結(jié)束前,同樣group id 的任務不能被再次放入。④添加任務時和complete task 時均可嘗試重新分派任務。

        1.4 線程池的管理 線程池需提供的功能有:

        ①啟動指定數(shù)目的線程。②任務能夠通過接口添加到線程池的隊列中。③運行時動態(tài)增減線程數(shù)量。④退出時確保運行中的任務執(zhí)行完畢。

        1.5 線程模型的輔助設施 線程模型需要提供的輔助設置有:

        ①創(chuàng)建任務。②創(chuàng)建回調(diào)命令。③提供Factory 機制,使目標線程可以注冊相應的命令到Factory。該命令可將任意命令切換到線程執(zhí)行。

        2 線程模型的執(zhí)行過程

        線程模型執(zhí)行的過程如圖2 所示。

        圖2 線程模型執(zhí)行過程

        線程模型的使用者通過接口創(chuàng)建線程模型并拿到需要的接口。通過線程模型提供的輔助函數(shù)生成任務后,調(diào)用線程模型接口,把任務添加到線程模型管理的任務隊列。管理線程,在任務隊列不為空時,選擇合適的任務,并將完成任務的事件和任務命令綁定。將組裝好的命令放入線程池中去運行。執(zhí)行完畢后,完成任務的事件被觸發(fā),并切換到管理線程。該事件將進行下一輪任務分派。

        3 線程模型優(yōu)化策略

        對于不同的應用場合,線程模型有著不同的優(yōu)化策略。優(yōu)化策略一般考慮的環(huán)節(jié)有:

        ①是否充分利用每個線程的執(zhí)行能力。②是否最大限度地減少了任務在線程之間的調(diào)度。③有些任務只讀共享的數(shù)據(jù),有些需寫那些數(shù)據(jù)。如果能將讀寫任務區(qū)分對待,那么讀數(shù)據(jù)的任務就可以同時添加到線程池中。④調(diào)度管理程序處理添加和完成任務的優(yōu)先順序,及任務的存儲結(jié)構(gòu)。⑤任務隊列的動態(tài)規(guī)劃。

        4 總結(jié)

        無論在客戶端UI 編程,還是在服務端編程,線程模型都是一個非常重要的設施,能提高程序的穩(wěn)定性和可維護性。對于規(guī)模較大的系統(tǒng),這是一項非常重要的基礎設施。本文結(jié)合在工程中的實踐經(jīng)驗,詳盡分析了設計一個線程模型時需考慮的目標、結(jié)構(gòu)、接口及模型的工作流。實踐中,這種線程模型能幫助應用程序簡化設計,提高穩(wěn)定性,提升效率。

        [1]王鳳嶺.分布式操作系統(tǒng)中線程包實現(xiàn)方法的對比研究[J].南寧職業(yè)技術學院學報,2004(04).

        [2]陳矯陽,陳楸,劉桓龍.基于LabWindows/CVI 多線程數(shù)據(jù)采集的研究[J].科學技術與工程,2008(09).

        [3]周仕祥,劉伯恕.Boost 功率因數(shù)校正器的效率和空載損耗研究[J].電力電子技術,2003(03).

        [4]肖和平,韓偉紅,賈焰,吳泉源.StarCCM2.0 中高性能線程池模型的研究與實現(xiàn)[J].計算機工程,2005(24).

        猜你喜歡
        分派線程隊列
        隊列里的小秘密
        基于多隊列切換的SDN擁塞控制*
        軟件(2020年3期)2020-04-20 00:58:44
        在隊列里
        《宋元學案》中程頤思想的詮釋與評價——兼論二程思想的比較及其分派
        哲學評論(2018年1期)2018-09-14 02:34:36
        論勞思光對宋明儒學分派問題的研究
        豐田加速駛?cè)胱詣玉{駛隊列
        快遞小哥的一天
        新民周刊(2017年9期)2017-03-20 17:45:04
        淺談linux多線程協(xié)作
        跟蹤導練(四)
        Linux線程實現(xiàn)技術研究
        国产美女自慰在线观看| 精品极品一区二区三区| 一区二区三区中文字幕p站| 开心久久综合婷婷九月| 国模冰莲自慰肥美胞极品人体图| 国产又滑又嫩又白| 国产av日韩a∨亚洲av电影| 完整在线视频免费黄片| 国产一区二区视频免费| 在教室伦流澡到高潮hgl动漫| 处破痛哭a√18成年片免费| 欧美激情精品久久999| 大量老肥熟女老女人自拍| 精品亚洲第一区二区三区| 男女做爰猛烈啪啪吃奶动 | av男人的天堂亚洲综合网| 国产精品爽爽v在线观看无码| 午夜dj在线观看免费视频| 国产精品11p| 永久免费中文字幕av| 少妇连续高潮爽到抽搐| 国产深夜男女无套内射| 国产精品三级一区二区按摩| 欧美亚洲另类 丝袜综合网| 久久久免费精品国产色夜| 国产国产精品人在线视| 亚洲av综合色区无码一二三区| 国产精品入口蜜桃人妻| 久久少妇呻吟视频久久久| 日本免费久久高清视频| 国产精品一卡二卡三卡| 久久亚洲欧洲无码中文| a级国产精品片在线观看| 亚洲专区路线一路线二网| 免费女人高潮流视频在线观看| 亚洲精品你懂的在线观看| 免费毛片一区二区三区女同| 国产免费av手机在线观看片| 伊人久久大香线蕉av不卡| 一区一级三级在线观看| 国产在线观看免费不卡视频|