麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

定時器的處理方法及裝置的制作方法

文檔序號:6438494閱讀:304來源:國知局
專利名稱:定時器的處理方法及裝置的制作方法
技術領域
本申請涉及數據處理領域,具體而言,涉及一種定時器的處理方法及裝置。
背景技術
隨著互聯網技術的發展,海量元素定時器得到越來越多的應用。這里,首先描述一下關于海量元素定時器的幾個基本概念:1)定時器是指在指定的時間點或者指定的時間范圍內觸發預先設定好的事件的硬件或者軟件的具體實現;定時器事件是指,需要在某個時間點或者時間范圍內,做某件事情的一個數據結構實體;海量元素是指大量的需要觸發的事件,例如百萬以上的級別;海量元素定時器是指,在指定的時間點或者指定的時間范圍內觸發預先設定好的海量元素的硬件或者軟件的具體實現。在現有技術中,從操作系統底層到應用層,有很多種方法實現海量元素定時器。但是,這些方法只適合于數據量不大,時間范圍比較連續的情況,對于海量元素且時間分布離散的定時器,現有技術中缺少比較好的實現方法。例如,在現有技術中存在無序鏈表、有序鏈表和時間輪等幾種方案,以下分別介紹。I)無序鏈表方案:按照創建順序,把事件元素用鏈表連接起來,不停遍歷鏈表,查找到達發生時間點的事件元素并處理。在該種實現方式中,由于在鏈表中事件是無序排列,所以要判斷哪些事件到了觸發點,必須要遍歷所有元素,假設當前有500萬個事件元素在鏈表中,從定時器事件的觸發時間到達至執行該定時器事件的時間要求不超過I秒(即,定時器事件精確度要求為I秒),那么遍歷將會導致CPU處理負荷飆升,大幅增加系統負載。2)有序鏈表方案:按照事件的發生時間順序,把事件元素用一個有序的鏈表連接起來,查找到達發生時間點的事件元素并處理。該方案是對無序鏈表實現的改進。然而,該種實現方式雖然對鏈表做到了有序排列,降低了查找開銷,但是對于插入元素卻帶來了額外的開銷,因為每次插入需要先查找在有序鏈表中的插入點,隨著元素的增多這個開銷會增大,影響處理效率。3)時間輪方案:把時間按照一定的間隔劃分,并預先為每個時間段劃分好存儲空間,把事件元素按照發生時間分別存儲到對應時間段的存儲空間,當到達某個時間輪范圍時,取出這一個輪所包含的所有事件元素。該時間輪的實現方式對于時間范圍分布比較均勻的事件元素比較合適,但對于時間分布很離散的事件元素則不適合,因為時間輪的實現,需要分配連續的空間,而如果是離散的時間分布,則此種方式會大量浪費內存資源。因此,針對相關技術中定時器的處理方式系統開銷比較大的問題,目前尚未提出有效的解決方案。

發明內容
針對現有技術中定時器的處理方式系統開銷比較大的問題,本申請的主要目的在于提供一種定時器的處理方法及裝置,以解決上述問題。為了實現上述目的,根據本申請的一個方面,提供一種定時器的處理方法,其包括:將定時器事件的觸發時間劃分成多個時間段,其中,每一個所述時間段對應于一個哈希值;將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中;以及將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識。優選地,所述將各個所述鏈表中的定時器事件映射到哈希表中之后,所述定時器的處理方法還包括:獲取當前時間段所對應的當前哈希值;在所述哈希表中查找與所述當前哈希值對應的鏈表的標識;執行查找到的鏈表的標識指示的鏈表中的定時器事件。優選地,所述執行查找到的鏈表的標識指示的鏈表中的定時器事件的步驟包括:創建任務隊列;將查找到的鏈表中的定時器事件加入所述任務隊列中;執行所述任務隊列中的定時器事件。優選地,所述將查找到的鏈表中的定時器事件加入所述任務隊列中的步驟包括:創建調度線程;所述調度線程判斷是否存在所述查找到的鏈表中的定時器事件;在判斷出存在所述查找到的鏈表中的定時器事件時,所述喚醒的調度線程將查找到的鏈表中的定時器事件加入所述任務隊列中。優選地,所述執行任務隊列中的定時器事件的步驟包括:任務線程執行任務隊列中的定時器事件。優選地,所述將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中的步驟具體包括:判斷待處理的定時器事件的觸發時間所處的時間段;獲取所述觸發時間所處的時間段對應的哈希值;查找與所獲取到的哈希值對應的鏈表;將所述待處理的定時器事件插入到所查找到的鏈表中。優選地,所述查找與所獲取到的哈希值對應的鏈表的步驟包括:在查找不到與所獲取到的哈希值對應的鏈表時,創建與所獲取到的哈希值對應的鏈表,并將所創建的鏈表作為所述查找到的鏈表。優選地,所述將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中的步驟包括:按照觸發時間的先后順序在同一個時間段上將觸發時間在該同一個時間段上的定時器事件插入到同一個鏈表中。為了實現上述目的,根據本申請的另一方面,還提供一種定時器的處理裝置,其包括:劃分單元,用于將定時器事件的觸發時間劃分成多個時間段,其中,每一個所述時間段對應于一個哈希值;插入單元,用于將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中;映射單元,用于將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識。優選地,所述定時器的處理裝置還包括:獲取單元,用于在將各個所述鏈表中的定時器事件映射到哈希表中之后,獲取當前時間段所對應的當前哈希值;查找單元,用于在所述哈希表中查找與所述當前哈希值對應的鏈表的標識;執行單元,用于執行查找到的鏈表的標識指示的鏈表中的定時器事件。在本申請中,由于將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識,因此,在查找定時器事件時,對于屬于同一個哈希值的定時器事件,可以僅執行一次查找操作即得到對應于哈希值的鏈表,并得到該鏈表下的所有定時器事件,從而大大降低了比較操作執行的次數,解決了現有技術中定時器的處理方式系統開銷比較大的問題,實現了減小處理定時器事件的系統開銷的技術效果。


構成本申請的一部分的附圖用來提供對本申請的進一步理解,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:圖1是根據本申請實施例的定時器的處理方法的一種優選地流程圖;圖2是根據本申請實施例的對新增定時器事件的定時器的處理方法的一種優選地流程圖;圖3是根據本申請實施例的創建哈希表的一種優選地流程示意圖;圖4是根據本申請實施例的創建由定時器事件組成的任務隊列的一種優選地流程不意圖;圖5是根據本申請實施例的任務線程對任務隊列進行調度的一種優選地流程圖;圖6是根據本申請實施例的執行定時器事件的一種優選地流程圖;圖7是根據本申請實施例的定時器的處理裝置的一種優選地示意圖;圖8是根據本申請實施例的定時器的處理裝置另一種優選地示意圖;圖9是根據本申請實施例的定時器的處理裝置的又一種優選地示意圖。
具體實施例方式需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結合實施例來詳細說明本申請。實施例1圖1是根據本申請實施例的定時器的處理方法的流程圖。如圖1所示,該定時器的處理方法包括:步驟S102,將定時器事件的觸發時間劃分成多個時間段,其中,每一個所述時間段
對應于一個哈希值。優選地,在將定時器事件的觸發時間換算為哈希值時,還可以根據精確度的要求進行換算,如果定時器精確度要求為I秒,則定時器事件的觸發時間采用32位的二進制數據來表示;如果定時器精確度要求為0.001秒,則定時器事件的觸發時間采用64位的二進制數據來表示。步驟S104,將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中。優選地,按照各個定時器事件的觸發時間的時間順序,將屬于同一個哈希值的定時器事件插入到同一個鏈表中,即,實現了鏈表中各個定時器事件的有序存儲。步驟S106,將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識。基于上述步驟得到的鏈表和哈希表,由于將觸發時間劃分為多個時間段,并且將屬于同一時間段的定時器事件換算為同一個哈希值,以及將同一個哈希值的定時器事件插入到同一個鏈表中,因而,在查找定時器事件時,只需要根據待查詢的時間段信息,根據哈希值換算規則,得到哈希值,根據該哈希值就可以找到待查詢的時間段內的定時器事件,僅執行一次查找操作,就可以得到對應于哈希值的鏈表,從而得到該鏈表下的所有定時器事件,即哈希值相同的定時器事件,可以提高查找的效率,進而能夠減小系統開銷。優選地,為了將各個鏈表映射到哈希表中,可以首先創建一個哈希表;在創建哈希表后,將步驟S104中得到的插入屬于同一個哈希值的定時器事件的各個鏈表映射到創建的哈希表中。具體地,如圖3所示,倉丨」建的哈希表的格式為hash_map〈time_t, list〈CTimer*>>,其中,CTimer表示定時器事件的數據結構,list〈CTimer*>表示由定時器事件所構成的鏈表,<time_t, list〈CTimer*>>表示按照觸發時間(time_t)對應的哈希值將各個鏈表映射到哈希表中。基于上述實施例1提供的這種處理方式,結合了離散和線性兩種處理方式,即,結合了由哈希值構成哈希表的離散處理方式以及由鏈表線性存儲同一哈希值的定時器事件的線性處理方式,在插入定時器事件時,只需要經過哈希計算,得到哈希值,并在找到對應哈希值的鏈表后,將該定時器事件插入該鏈表中即可,這不但避免有序鏈表方案在插入定時器事件時需要查找觸發時間在整個鏈表中的位置而導致的查找開銷大的問題,而且避免了時間輪方案在需要預先分配存儲空間而導致存儲空間浪費的問題,其不但具有存儲簡單、開銷小的優點,而且可以有效地利用存儲空間。實施例2需要說明的是,該實施例中的定時器的處理方法既可以包括對已有定時器事件的處理方法,也可以包括對新增定時器事件的處理方法。圖2即為根據本申請實施例的對新增定時器事件的定時器的處理方法的流程圖。假定新增多個定時器事件,此處僅以新增第一定時器事件為例進行描述,其中,該第一定時器事件可以是多個新增定時器事件中的任意一個定時器事件。具體包括如下步驟:步驟S202,將第一定時器事件的觸發時間換算為第一哈希值。步驟S204,查找第一哈希值對應的鏈表。步驟S206,判斷是否能夠查找到與第一哈希值對應的鏈表,若判斷結果為是,則執行步驟S210,否則,執行步驟S208。步驟S208,創建對應于第一哈希值的鏈表。通過該步驟S208,由于通過按照哈希值創建相應的鏈表,能夠使得每個創建的鏈表分別對應于同一個哈希值,從而在出現同一哈希值對應的定時器事件時,可以直接將定時器事件插入到所創建的鏈表中。步驟S210,將第一定時器事件插入到相應的鏈表中。優選地,在該步驟S210中,每間隔一段時間,例如第一預設時間,判斷一次是否有新的定時器事件產生,若確定有新的定時器事件產生時,執行一次插入,此時步驟S210還包括以下步驟S210-1至步驟S210-2:步驟S210-1,判斷計時的時間長度是否達到第一預設時間長度,其中,該第一預設時間長度可以是根據實際需要設定的任意時間長度,在確定一個時間點之后,從該時間點開始計時,并判斷計時的時間長度是否達到第一預設時間長度,其中,在第一次執行插入時,計時的開始時間點可以是任意設定的時間點,在后續執行插入時,計時的開始時間點為執行上一次插入結束時的時間點;以及
步驟S210-2,在計時的時間長度達到第一預設時間長度時,將該計時的時間長度內新增的、需要插入到鏈表中的定時器事件插入到對應的鏈表中,其中,將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中。根據上述的插入方式,可以每隔預定的時間對需要插入鏈表的定時器事件執行批量地插入操作,而不是在一出現需要插入鏈表的定時器事件就執行插入操作,這樣可以進一步地減小系統開銷。由于在新增一個定時器事件時,直接查找該定時器事件對應的鏈表,然后將定時器事件插入到對應的鏈表中,使得在每增加一個定時器事件時,就能夠將該定時器事件存儲到預設的位置,實現了定時器事件的有序存儲的技術效果。實施例3基于上述實施例1或2所得到的哈希表,通過調度可以執行鏈表中的各個定時器事件。本實施例提供了一種優選地定時器事件的調度方式。以下對本申請實施例的調度過程進行描述,該調度過程包括以下步驟:步驟SI,將各個所述鏈表中的定時器事件映射到哈希表中之后,獲取當前時間段所對應的當前哈希值;步驟S2,在所述哈希表中查找與所述當前哈希值對應的鏈表的標識;步驟S3,執行查找到的鏈表的標識指示的鏈表中的定時器事件。對于如何執行查找到的鏈表的標識指示的鏈表中的定時器事件,本申請提供了幾種優選的實現方式,具體包括如下步驟:I)步驟S3-1,創建任務隊列;任務隊列用于放置當前需要執行的定時器事件。具體地,如圖4所示,該圖示出了創建一個由定時器事件組成的任務隊列的過程,首先初始化程序,然后創建一個由定時器事件CTimer*所構成的任務隊列queue。在創建任務隊列之后,任務線程可以從任務隊列中獲取定時器事件。2)步驟S3_2(調度步驟):用于將預定的時間段換算成至少一個哈希值,根據該哈希值,在哈希表中查找對應的鏈表,將查找到的鏈表中的定時器事件加入任務隊列中,執行任務隊列中的定時器事件。上述預定的時間段可以為需要調度的定時器事件的觸發時間所對應的時間段,也可以是根據實際需要設置的任意長度的時間段。在本實施例中,首先根據定時器事件的觸發時間確定需要調度的定時器事件,然后再對定時器事件進行調度。具體地,該步驟S3-2中的調度步驟可以包括步驟S3-2-1至步驟S3_2_3:步驟S3-2-1,創建調度線程;步驟S3-2-2,調度線程查找哈希表中的定時器事件;在該步驟S3-2-2中,基于上述實施例所得到的哈希表,調度線程以鏈表為單位查找哈希表中哈希值對應的定時器事件。具體地,由于在哈希表中,將觸發時間劃分為多個時間段,并且將屬于同一時間段的定時器事件換算為同一個哈希值,以及將同一個哈希值的定時器事件插入到同一個鏈表中,因而,在調度線程查找定時器事件時,只需要根據待查詢的時間段信息,根據哈希值換算規則,得到哈希值,根據該哈希值就可以找到待查詢的時間段內的定時器事件,僅執行一次查找操作,就可以得到對應于哈希值的鏈表,從而得到該鏈表下的所有定時器事件,即以鏈表為單位查找哈希表中哈希值對應的定時器事件,提高了查找的效率,進而減小了系統開銷。為了減少系統開銷,每隔預定時間喚醒一次所述調度線程,例如,每間隔第二預設時間段喚醒一次,將當前查找到的定時器事件加入到任務隊列中,在執行完操作后進入休眠狀態。具體地,本優選的實施例還提供了執行任務隊列中的定時器事件的步驟S3-2-2,其中,該步驟S3-2-2還包括步驟S3-2-2-1和步驟S3-2-2-2:步驟S3-2-2-1,調度線程每間隔第二預設時間段喚醒一次;步驟S3-2-2-2,取出第二預設時間段前后時間值對應的哈希值范圍,以查找哈希表中的定時器事件。在查找到哈希表中的定時器事件之后,即可通過調度將所查找到的定時器事件加入到任務隊列中,以便通過任務線程來執行任務隊列中的定時器事件。

其中,該第二預設時間段可以是根據實際需要任意設定的時間段,通過使得調度線程每間隔第二預設時間段喚醒一次,可以使得調度線程不必一直處于喚醒狀態,而是每間隔第二預設時間段之后,調度線程喚醒一次,相比于調度線程一直處于喚醒狀態,或者不間斷地執行調度,減小了系統開銷。例如,如圖5所示,調度線程可以每間隔0.1秒喚醒一次,優選地,該調度線程的時間精確度可以是比定時器事件要求的精確度高至少一個數量級,這樣可以使得整個執行定制器的過程滿足定時器事件所需的精確度的要求,實現更精確地查找。比如定時器事件要求的時間精確度為I秒,那么調度線程可以每隔0.1秒喚醒一次。以下對查找哈希表中的定時器事件的過程進行描述:調度線程每間隔一段時間喚醒一次,以查找哈希表中的定時器事件,在查找完畢后重新進入休眠狀態,具體地,調度線程(比如間隔0.1秒)自喚醒之后判斷任務隊列中是否有定時器事件,在判斷結果為是時,執行步驟a,否則,執行步驟b。步驟a,調度線程從上一次喚醒的時間值對應的哈希值last_KEY到當前時間值對應的哈希值now_KEY的范圍內,查找哈希表中KEY對應的定時器事件鏈表。步驟b,用當前時間值替換上一次時間值,從而更新上一次喚醒的時間值,以便在下次執行查找時,從最近的上一次喚醒的時間值對應的哈希值last_KEY到當前時間值對應的哈希值now_KEY的范圍內,查找哈希表中KEY對應的定時器事件鏈表。步驟S3-2-3,調度線程在查找到哈希表中存在哈希值對應的定時器事件時,可以將查找到的鏈表中的定時器事件加入到任務隊列中以完成對定時器事件的調度。如前述實施例所述,在哈希表中,定時器事件的存儲格式為hash_map〈time_t,list<CTimer* 0在該步驟S3-2-3中,在查找到哈希表中存在哈希值對應的定時器事件時,可以從哈希表中得到定時器事件鏈表list〈CTimer*>。在時間已知的情況下,通過步驟S3-2-1至步驟S3-2-3,就可以獲取與該時間相對應的定時器事件的鏈表,然后將獲取的鏈表中的定時器事件放入任務隊列中并完成對定時器事件的調度。在該實施例中,通過步驟S3-2-2可以看出,本申請實施例所創建的調度線程是以鏈表為單位查找哈希表中哈希值對應的定時器事件,在查找到一個鏈表時,就可以查找到該鏈下的對應同一哈希值的所有定時器事件,因而,通過采用本申請實施例所提供的調度方法,可以極大地提高調度線程的查找效率。實施例4在完成上述步驟S3-2中的調度步驟之后,或者,在執行完步驟上述S3-2-2中將查找到的鏈表中的定時器事件加入到任務隊列中之后,還可以通過任務線程執行任務隊列中的定時器事件。因而,本申請實施例所提供的定時器的處理方法還可以包括定時器事件的執行過程。需要說明的是,基于上述本申請實施例所提供的定時器事件的存儲方式,以及定時器事件的調度方法,本申請實施例所提供的定時器事件的執行過程可以是采用常規的方式來執行,也可以是采用以下本申請實施例所提供的優選方式來執行。圖6示出了任務線程從任務隊列中獲取任務以執行定時器事件的方法。如圖6所示,上述執行定時器事件的過程可以包括以下步驟:步驟S602,創建任務線程;步驟S604,在創建一定數量的任務線程之后,任務線程等待從任務隊列中獲取定時器事件。為了減少系統開銷,優選地,任務線程每間隔一段時間喚醒一次,執行任務隊列中的定時器事件,并且在執行完任務隊列中的定時器事件后,重新進入休眠狀態。或者,在執行完步驟S3-2-2中將查找到的鏈表中的定時器事件置于任務隊列中之后,喚醒任務線程以執行任務隊列中的定時器事件,以及在執行完任務隊列中的定時器事件后,重新進入休眠狀態。步驟S606,任務線程判斷任務隊列中是否有任務;在判斷結果為是時,執行步驟S608,在判斷結果為否時,執行步驟S604,等待下一次喚醒,并繼續判斷任務隊列中是否有任務。步驟S608,任務線程從任務隊列中獲取定時器事件。步驟S610,執行定時器事件。在本申請中,由于把定時器事件按照觸發時間,根據精確度的要求換算成一個哈希值,將其映射到一個支持離散存儲的容器中(哈希表)。以及用離散存儲(哈希表)和線性存儲(鏈表)相結合的方式來存儲和管理定時器事件。即將同一個時間段內觸發的定時器事件的觸發時間換算為一個哈希值,用同一個鏈表一個時間段內觸發的定時器事件,并將該鏈表映射到哈希表中。更進一步地,可以用調度線程和任務線程分離的方式分別完成觸發和運行定時器事件。調度線程可以從哈希表中獲取事件元素鏈表,并將每個元素放置在任務隊列中。任務線程負責從任務隊列中獲取元素并處理。從而在獲取到時間范圍的情況下,可以直接獲取時間范圍所對應的定時器事件的鏈表以獲取到鏈表中的所有定時器事件,這有效降低了對海量元素定時器處理的系統開銷。需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執行指令的計算機系統中執行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執行所示出或描述的步驟。實施例5
本申請實施例還提供了一種定時器的處理裝置,該定時器的處理裝置可以用于實現上述本申請實施例提供的定時器的處理方法。圖7是根據本申請實施例定時器的處理裝置的一種優選示意圖。如圖7所示,該定時器的處理裝置包括:I)劃分單元702,用于將定時器事件的觸發時間劃分成多個時間段,其中,每一個所述時間段對應于一個哈希值。優選地,在所述劃分單元702將定時器事件的觸發時間換算為哈希值時,還可以根據精確度的要求進行換算,如果定時器的精確度要求為I秒,則定時器事件的觸發時間采用32位的二進制數據來表示;如果定時器精確度要求為0.001秒,則定時器事件的觸發時間采用64位的二進制數據來表示。2)插入單元704,用于將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中。優選地,所述插入單元704按照各個定時器事件的觸發時間的時間順序,將屬于同一個哈希值的定時器事件插入到同一個鏈表中,即,實現了鏈表中各個定時器事件的有
序存儲。3)映射單元706,用于將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識。優選地,為了將各個鏈表映射到哈希表中,可以首先創建一個哈希表;在創建哈希表后,映射單元706將插入單元704得到的插入屬于同一個哈希值的定時器事件的各個鏈表映射到創建的哈希表中。在上述定時器的處理裝置中,由于所述劃分單元702將觸發時間劃分為多個時間段,并且將屬于同一時間段的定時器事件換算為同一個哈希值,以及所述插入單元704將同一個哈希值的定時器事件插入到同一個鏈表中,因而,在查找定時器事件時,只需要根據待查詢的時間段信息,根據哈希值換算規則,得到哈希值,根據該哈希值就可以找到待查詢的時間段內的定時器事件,僅執行一次查找操作,就可以得到對應于哈希值的鏈表,從而得到該鏈表下的所有定時器事件,即哈希值相同的定時器事件,可以提高查找的效率,進而能夠減小系統開銷。圖8是根據本申請實施例的定時器的處理裝置另一種的優選示意圖。如圖8所示,上述定時器的處理裝置還可以包括:I)獲取單元802,用于在將各個所述鏈表中的定時器事件映射到哈希表中之后,獲取當前時間段所對應的當前哈希值。2)查找單元804,用于在所述哈希表中查找與所述當前哈希值對應的鏈表的標識。3)執行單元806,用于執行查找到的鏈表的標識指示的鏈表中的定時器事件。對于如何執行查找到的鏈表的標識指示的鏈表中的定時器事件,本申請提供了幾種優選的實現方式,優選地,所述執行單元806包括:I)創建模塊8061,用于創建任務隊列,其中,任務隊列用于放置當前需要執行的定時器事件。
2)調度模塊8062,用于將預定的時間段換算成至少一個哈希值,根據該哈希值,在哈希表中查找對應的鏈表;將查找到的鏈表中的定時器事件加入任務隊列中,以便由任務線程來執行任務隊列中的定時器事件。優選地,所述調度模塊8062通過以下步驟將查找到的鏈表中的定時器事件加入任務隊列中:創建調度線程;每隔預定時間喚醒所述調度線程;所喚醒的調度線程判斷是否存在所述查找到的鏈表中的定時器事件以及在判斷出存在所述查找到的鏈表中的定時器事件時,所述喚醒的調度線程將查找到的鏈表中的定時器事件加入所述任務隊列中。上述實施例中,用調度線程和任務線程分離的方式分別完成觸發和運行定時器事件。調度線程可以從哈希表中獲取事件元素鏈表,并將每個元素放置在任務隊列中。任務線程負責從任務隊列中獲取元素并處理。從而在獲取到時間范圍的情況下,可以直接獲取時間范圍所對應的定時器事件的鏈表以獲取到鏈表中的所有定時器事件,這有效降低了對海量元素定時器處理的系統開銷。優選地,圖9是根據本申請實施例的定時器的處理裝置又一種優選地示意圖。如圖9所示,所述插入單元704還包括:I)判斷模塊7041,用于在將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中的過程中,判斷待處理的定時器事件的觸發時間所處的時間段;2)獲取模塊7042,用于獲取所處的時間段對應的哈希值;3)查找模塊7043,用于查找與所獲取到的哈希值對應的鏈表;4)插入模塊7044,用于將所述待處理的定時器事件插入到所查找到的鏈表中。優選地,插入單元704還包括:5)創建模塊7045,用于在所述查找模塊查找不到與所獲取到的哈希值對應的鏈表時,創建與所獲取到的哈希值對應的鏈表,并將所創建的鏈表作為所述查找到的鏈表。優選地,所述插入單元704還用于按照觸發時間的先后順序在同一個時間段上將觸發時間在該同一個時間段上的定時器事件插入到同一個鏈表中。在上述實施例中,由于將觸發時間劃分為多個時間段,并且將屬于同一時間段的定時器事件換算為同一個哈希值,將同一個哈希值的定時器事件插入到同一個鏈表中,因而,在查找定時器事件時,只需要根據待查詢的時間段信息,根據哈希值換算規則,得到哈希值,根據該哈希值就可以找到待查詢的時間段內的定時器事件,僅執行一次查找操作,就可以得到對應于哈希值的鏈表,從而得到該鏈表下的所有定時器事件,即哈希值相同的定時器事件。本申請實施例提供的這種處理方式,結合了離散和線性兩種處理方式,即結合了由哈希值構成哈希表離散處理方式以及由鏈表線性存儲同一哈希值的定時器事件,在插入定時器事件時,只需要經過哈希計算,得到哈希值,并在找到對應哈希值的鏈表后,將該定時器事件插入該鏈表中即可,這不但避免有序鏈表方案插入定時器事件時需要查找到對應的具體插入鏈表的位置而導致存在開銷大的問題,而且避免了時間輪方案需要預先分配存儲空間而導致存儲空間浪費的問題,具有存儲簡單、開銷小的優點,并且可以有效地利用存儲空間。通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現。基于這樣的理解,本申請的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品可以存儲在存儲介質中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本申請各個實施例或者實施例的某些部分所述的方法。本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。本申請可用于眾多通用或專用的計算系統環境或配置中。例如:個人計算機、服務器計算機、手持設備或便攜式設備、平板型設備、多處理器系統、基于微處理器的系統、置頂盒、可編程的消費電子設備、網絡PC、小型計算機、大型計算機、包括以上任何系統或設備的分布式計算環境等等。本申請可以在由計算機執行的計算機可執行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執行特定任務或實現特定抽象數據類型的例程、程序、對象、組件、數據結構等等。也可以在分布式計算環境中實踐本申請,在這些分布式計算環境中,由通過通信網絡而被連接的遠程處理設備來執行任務。在分布式計算環境中,程序模塊可以位于包括存儲設備在內的本地和遠程計算機存儲介質中。從以上的描述中,可以看出,本申請實現了降低對海量元素定時器處理的系統開銷以及節約內存空間的效果。顯然,本領域的技術人員應該明白,上述的本申請的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現。這樣,本申請不限制于任何特定的硬件和軟件結合。以上所述僅為本申請的優選實施例而已,并不用于限制本申請,對于本領域的技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本申請的保護范圍之內。
權利要求
1.一種定時器的處理方法,其特征在于,包括: 將定時器事件的觸發時間劃分成多個時間段,其中,每一個所述時間段對應于一個哈希值; 將所述觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中;以及將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個所述定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識。
2.根據權利要求1所述的方法,其特征在于,所述將各個所述鏈表中的定時器事件映射到哈希表中之后,還包括: 獲取當前時間段所對應的當前哈希值; 在所述哈希表中查找與所述當前哈希值對應的鏈表的標識; 執行查找到的鏈表的標識指示的鏈表中的定時器事件。
3.根據權利要求2所述的方法,其特征在于,所述執行查找到的鏈表的標識指示的鏈表中的定時器事件的步驟包括: 創建任務隊列; 將查找到的鏈表中的定時器事件加入所述任務隊列中; 執行所述任務隊列中的定時器事件。
4.根據權利要求3所述的方法,其特征在于,所述將查找到的鏈表中的定時器事件加入所述任務隊列中的步驟包括: 創建調度線程; 所述調度線程判斷是否存在所述查找到的鏈表中的定時器事件;以及在判斷出存在所述查找到的鏈表中的定時器事件時,所述喚醒的調度線程將查找到的鏈表中的定時器事件加入所述任務隊列中。
5.根據權利要求4所述的方法,其特征在于,所述執行任務隊列中的定時器事件的步驟包括: 任務線程執行任務隊列中的定時器事件。
6.根據權利要求1所述的方法,其特征在于,所述將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中的步驟具體包括: 判斷待處理的定時器事件的觸發時間所處的時間段; 獲取所述觸發時間所處的時間段對應的哈希值; 查找與所獲取到的哈希值對應的鏈表; 將所述待處理的定時器事件插入到所查找到的鏈表中。
7.根據權利要求6所述的方法,其特征在于,所述查找與所獲取到的哈希值對應的鏈表的步驟包括: 在查找不到與所獲取到的哈希值對應的鏈表時,創建與所獲取到的哈希值對應的鏈表,并將所創建的鏈表作為所述查找到的鏈表。
8.根據權利要求1所述的方法,其特征在于,所述將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中的步驟包括: 按照觸發時間的先后順序在同一個時間段上將觸發時間在該同一個時間段上的定時器事件插入到同一個鏈表中。
9.一種定時器的處理裝置,其特征在于,包括: 劃分單元,用于將定時器事件的觸發時間劃分成多個時間段,其中,每一個所述時間段對應于一個哈希值; 插入單兀,用于將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中; 映射單元,用于將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識。
10.根據權利要求9所述的裝置,其特征在于,還包括: 獲取單元,用于在將各個所述鏈表中的定時器事件映射到哈希表中之后,獲取當前時間段所對應的當前哈希值; 查找單元,用于在所述哈希表中查找與所述當前哈希值對應的鏈表的標識;執行單元,用于執行查找到的鏈表的標識 指示的鏈表中的定時器事件。
全文摘要
本申請公開了一種定時器的處理方法及裝置,其中,該定時器的處理方法包括將定時器事件的觸發時間劃分成多個時間段,其中,每一個所述時間段對應于一個哈希值;將觸發時間在同一個時間段上的定時器事件插入到同一個鏈表中;以及將各個所述鏈表中的定時器事件映射到哈希表中,其中,每一個定時器事件在哈希表中對應地存儲有一個哈希值以及該定時器事件所在的鏈表的標識。本申請解決了現有技術中定時器的處理方式系統開銷比較大的問題,實現了減小處理定時器事件的系統開銷的技術效果。
文檔編號G06F17/30GK103106222SQ20111036231
公開日2013年5月15日 申請日期2011年11月15日 優先權日2011年11月15日
發明者王冠 申請人:阿里巴巴集團控股有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 广德县| 谢通门县| 乐亭县| 镇巴县| 九寨沟县| 策勒县| 刚察县| 梧州市| 呼图壁县| 金沙县| 报价| 临沧市| 白玉县| 新干县| 民县| 富阳市| 济南市| 乌鲁木齐县| 永昌县| 永定县| 大渡口区| 聂拉木县| 渭源县| 徐州市| 丹巴县| 平罗县| 东山县| 德保县| 噶尔县| 同江市| 全南县| 乌拉特后旗| 通城县| 浦北县| 靖边县| 南木林县| 环江| 廉江市| 柳州市| 大新县| 汝南县|