一種在多線程環境下高效處理延時任務的方法
2023-05-24 18:19:56 3
專利名稱:一種在多線程環境下高效處理延時任務的方法
技術領域:
本發明涉及一種在多線程環境下高效處理延時任務的方法,特別涉及一種使用 C# (C#是微軟公司發布的一種面向對象的、運行於.NET Framework之上的高級程序設計語 言。它包括了諸如單一繼承、接口、與Java幾乎同樣的語法和編譯成中間代碼再運行的過 程,是微軟公司.NET windows網絡框架的主角。)技術在多線程環境下高效處理延時任務 的方法。
背景技術:
運行在多線程環境下的服務程序一般比單線程複雜得多,因為在這種情況下需要 對共享資源的同步。而且.Net本身提供了線程池,這在提高服務效率的時候,也在一定程 度上增加了開發的複雜性,因為把用戶請求具體分配給哪個線程是.Net線程池決定的,開 發人員不能確定新用戶的請求將被哪個線程處理。一般的如果想讓線程過一段時間再執行,可以採用Thread. Sleep方法,此方法將 讓線程沉寂一會以後再被喚醒執行以達到延時的目的。此方法雖然簡單,但是可能會影響 其他用戶,因為可能會有多個客戶端同時使用一個伺服器線程處理任務,伺服器貿然的把 某個線程Sle印,可能會使其他使用這個線程處理任務的客戶端的請求也被掛起,這通常會 大大影響用戶體驗甚至使程序邏輯發生混亂。
發明內容
本發明所要解決的技術問題是提供一種在多線程環境下,使用與用戶線程獨立的 時鐘線程觸發定時任務,使延時執行的任務能夠穩定高效的被處理的方法。本發明所述的一種在多線程環境下高效處理延時任務的方法,該方法至少包括如 下的步驟步驟1 用一個類作為所有任務的基類,其他的具體的延時任務必須繼承這個基 類。此類有一個屬性jxecuteTime表示任務被執行的時間,有一個虛方法Execute 用來 被在到了任務執行時間後,執行具體操作;步驟2 程序啟動時,首先初始化一個任務列表處理器,它包含一個待處理任務列 表,所有的定時任務在初始化好以後,必須加入這個任務列表中等待執行。此處理器有兩個 方法Execute 和AddDuty (Duty duty),前一個方法用來執行任務列表裡面的任務,後一 個方法用於把具體任務添加到任務列表;步驟3 在應用程式啟動時,初始化一個任務調度器,它包含一個時鐘Timer對 象,它每隔一小段時間激發一次,執行任務列表對象的Execute 方法;步驟4 當應用想執行一個延時到某一時間點執行的任務的時候,必須初始化一 個繼承了任務基類並且重寫了 ExecuteO方法的具體任務對象,然後通過任務列表處理器 的AddDuty (Duty duty)方法把任務添加到任務列表中;步驟5 每過一小段時間,任務調度器會執行任務列表處理器的ExecuteO方法,此方法按照順序取出所有的任務對象,判斷執行時間,如果執行之間>當前時間,則執行此 任務對象的Execute 方法;本發明涉及的一種在多線程環境下高效處理延時任務的方法,使得在多線程的復 雜環境下,延時執行的任務能夠執行,因為時鐘線程不會和任何一個客戶端請求共用,所以 在它執行定時任務的時候,不會對任何用戶請求造成影響。
具體實施例方式本發明的主要步驟如下步驟1 用一個類作為所有任務的基類,其他的具體的延時任務必須繼承這個基 類;步驟2 程序啟動時,首先初始化一個任務列表處理器,它包含一個待處理任務列 表,所有的定時任務在初始化好以後,必須加入這個任務列表中等待執行;步驟3 在應用程式啟動時,初始化一個任務調度器,它每隔一小段時間激發一 次,執行任務列表對象的Execute 方法;步驟4 當應用想執行一個延時到某一時間點執行的任務的時候,必須初始化一 個繼承了任務基類並且重寫了 ExecuteO方法的具體任務對象,然後通過任務列表處理器 的AddDuty(Duty duty)方法把任務添加到任務列表中;步驟5 每過一小段時間,任務調度器會執行任務列表處理器的ExecuteO方法, 此方法按照順序取出所有的任務對象,判斷執行時間,如果執行之間 > 當前時間,則執行此 任務對象的ExecuteO方法;上述的技術方案實施時,初始化任務和具體執行任務實現了鬆耦合,這大大增加 了定時任務系統的可擴展性,另外,因為使用單獨的時鐘線程來定時觸發任務,使得在多線 程的複雜環境下定時任務的執行更加穩定高效,即使有多個客戶端共用一個線程,在執行 定時任務的時候,已有的任何用戶線程都不會被影響。最後所應說明的是,以上實施例僅用以說明而並非限制本發明所描述的技術方 案;因此,儘管本說明書參照上述的實施例對本發明已進行了詳細的說明,但是,本領域的 普通技術人員應當理解,仍然可以對本發明進行修改或者等同地替換;而一切不脫離本發 明的精神和範圍的技術方案及其改進,其均應涵蓋在本發明的權利要求範圍當中。
權利要求
一種在多線程環境下高效處理延時任務的方法,其特徵在於該方法至少包括如下的步驟步驟1用一個類作為所有任務的基類,其他的具體的延時任務必須繼承這個基類。步驟2程序啟動時,首先初始化一個任務列表處理器,它包含一個待處理任務列表,所有的定時任務在初始化好以後,必須加入這個任務列表中等待執行。步驟3在應用程式啟動時,初始化一個任務調度器,它包含一個時鐘Timer對象,它每隔一小段時間激發一次,執行任務列表對象的Execute方法。步驟4當應用想執行一個延時到某一時間點執行的任務的時候,必須初始化一個繼承了任務基類並且重寫了Execute方法的具體任務對象,然後通過任務列表處理器的AddDuty方法把任務添加到任務列表中。步驟5每過一小段時間,任務調度器會執行任務列表處理器的Execute方法,此方法按照順序取出所有的任務對象,判斷執行時間,如果執行之間>當前時間,則執行此任務對象的Execute方法。
全文摘要
一種在多線程環境下高效處理延時任務的方法,首先用一個類作為所有任務的基類,其他的具體的延時任務必須繼承這個基類;程序啟動時,首先初始化一個任務列表處理器,它包含一個待處理任務列表,所有的定時任務在初始化好以後,必須加入這個任務列表中等待執行;然後在應用程式啟動時,初始化一個任務調度器;當應用想執行一個延時到某一時間點執行的任務的時候,必須初始化一個繼承了任務基類並且重寫了Execute方法的具體任務對象,然後通過任務列表處理器的AddDuty方法把任務添加到任務列表中;最後每過一小段時間,任務調度器會執行任務列表處理器的Execute方法。本發明使得在多線程的複雜環境下,延時執行的任務能夠執行。
文檔編號G06F9/44GK101887361SQ20091008409
公開日2010年11月17日 申請日期2009年5月14日 優先權日2009年5月14日
發明者劉立軍, 張守文, 王磊, 陶勇勝 申請人:灰熊(北京)科技有限公司