本發(fā)明涉及計算機
技術領域:
,具體涉及一種熱詞典切換方法和裝置。
背景技術:
:隨著計算機技術的發(fā)展,越來越多的線上服務為用戶提供網(wǎng)絡資源。而這些線上服務都可能用到一些詞典,而該詞典是相對獨立于服務的,服務首先會將詞典的內容加載到服務的內存中,然后使用。其中,該詞典如比如黑/白名單,索引詞等。而在實際應用中,這些詞典可能隨時會變化,比如黑/白名單可能隨著時間的變化在不斷的變化,因而某些需要這些詞典的服務則需要將其當前使用的詞典更新為最新的詞典。在先技術中,當詞典出現(xiàn)變化時,如果某個服務需要使用新的詞典,則需要停止服務,然后重啟該服務,從而才能加載該新的詞典。而上述方案對于線上服務來說,其相當于中斷了,在重啟過程中,外界用戶無法訪問該服務的任何功能,耽誤用戶對服務的訪問。技術實現(xiàn)要素:鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的熱詞典切換裝置和相應的熱詞典切換方法。依據(jù)本發(fā)明的一個方面,公開了一種熱詞典切換方法,包括:監(jiān)控各熱詞典的狀態(tài)是否變化;如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典的步驟,包括:通過線程池監(jiān)并行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述監(jiān)控各熱詞典的狀態(tài)是否變化的步驟包括:通過調用inotifyAPI監(jiān)控各熱詞典的狀態(tài)是否變化。優(yōu)選地,所述通過調用inotifyAPI監(jiān)控各熱詞典的狀態(tài)是否變化的步驟包括:對每個熱詞典,通過inotifyAPI中的初始化函數(shù)inotify_init()初始化文件變化監(jiān)視器,并返回文件描述符;通過inotifyAPI中的文件變化監(jiān)視器添加函數(shù)inotify_add_watch(),為所述文件描述符注冊一個文件變化監(jiān)視器;當通過所述文件變化監(jiān)視器監(jiān)控到熱詞典狀態(tài)變化事件之后,返回熱詞典的狀態(tài)變化消息。優(yōu)選地,所述將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典包括:由線程池接收所述熱詞典的狀態(tài)變化消息;根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,針對需要使用所述熱詞典的目標服務,將所述目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述監(jiān)控各熱詞典的狀態(tài)是否變化包括:監(jiān)控各熱詞典是否被更新。優(yōu)選地,所述將當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典的步驟包括:將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù);通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載。依據(jù)本發(fā)明的另外一個方面,還公開了一種熱詞典切換裝置,包括:監(jiān)控模塊,適于監(jiān)控各熱詞典的狀態(tài)是否變化;熱詞典切換模塊,適于如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述熱詞典切換模塊包括:線程池監(jiān)控模塊,適于通過線程池監(jiān)并行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述監(jiān)控模塊包括:接口監(jiān)聽模塊,適于通過調用inotifyAPI,監(jiān)聽各熱詞典的狀態(tài)是否變化。優(yōu)選地,所述接口監(jiān)聽模塊包括:文件描述符獲取模塊,適于對每個熱詞典,通過inotifyAPI中的初始化函數(shù)inotify_init()初始化文件變化監(jiān)視器,并返回文件描述符;文件變化監(jiān)視器添加模塊,適于通過inotifyAPI中的文件變化監(jiān)視器添加函數(shù)inotify_add_watch(),為所述文件描述符注冊一個文件變化監(jiān)視器;返回模塊,適于當通過所述文件變化監(jiān)視器監(jiān)控到熱詞典狀態(tài)變化事件之后,返回熱詞典的狀態(tài)變化消息。優(yōu)選地,所述熱詞典切換模塊包括:消息接收模塊,適于由線程池接收所述熱詞典的狀態(tài)變化消息;第一切換模塊,適于根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,針對需要使用所述熱詞典的目標服務,將所述目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述監(jiān)控模塊包括:監(jiān)控各熱詞典是否被更新。優(yōu)選地,所述熱詞典切換模塊包括:卸載模塊,適于將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù);重加載模塊,適于通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載。依據(jù)本發(fā)明的另外一個方面,還公開了一種熱詞典切換設備,包括:存儲器和處理器;所述存儲器用于存儲可執(zhí)行代碼;所述處理器用于執(zhí)行所述可執(zhí)行代碼,所述可執(zhí)行代碼執(zhí)行包括以下步驟的方法:監(jiān)控各熱詞典的狀態(tài)是否變化;如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。根據(jù)本發(fā)明的一種熱詞典切換方法和裝置,其可以監(jiān)控各個熱詞典的狀態(tài)是否變化,如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典,解決了需要重啟服務才能使用最新狀態(tài)下的熱詞典的問題,取得了不用重啟服務即可更新各服務使用的熱詞典,從而避免在線服務的暫停,使用戶可以不中斷對服務的訪問。上述說明僅是本發(fā)明技術方案的概述,為了能夠更清楚了解本發(fā)明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。附圖說明通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:圖1示出了根據(jù)本發(fā)明一個實施例的一種熱詞典切換方法的流程示意圖;圖1A示出了根據(jù)本發(fā)明一個實施例的一種線程池工作模型;圖2示出了根據(jù)本發(fā)明一個實施例的一種熱詞典切換方法的流程示意圖;圖3示出了根據(jù)本發(fā)明一個實施例的一種熱詞典切換裝置的結構示意圖;圖4示出了根據(jù)本發(fā)明一個實施例的一種熱詞典切換裝置的結構示意圖;圖5示出了根據(jù)本發(fā)明一個實施例的一種熱詞典切換設備的結構示意圖。具體實施方式下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。實施例一參照圖1,其示出了本發(fā)明實施例的一種熱詞典切換方法的流程示意圖,具體可以包括:步驟110,監(jiān)控各熱詞典的狀態(tài)是否變化;在本發(fā)明實施例中,所述熱詞典是一種基礎數(shù)據(jù)支持模塊,其為需要使用該熱詞典的服務提供數(shù)據(jù)支持,該熱詞典包括應黑/白名單,廣告搜索詞等熱詞典。其中,所述目標服務可以理解為應用的進程,比如在線殺毒服務,廣告搜索服務等??蛻舳丝梢栽L問該服務,以獲取其需要的數(shù)據(jù)。比如,熱詞典切換服務等。在實際應用中,熱詞典可能有很多個,比如100個熱詞典,不同種類的熱詞典管理不同需求或者說不同種類的詞。比如黑名單熱詞典、白名單熱詞典、廣告競價詞熱詞典等等。熱詞典的狀態(tài)可能不斷在變化,那么熱詞典狀態(tài)變化后,各個服務當前使用的數(shù)據(jù)則屬于過期狀態(tài),其不準確,那么本發(fā)明實施例則需要監(jiān)控熱詞典的狀態(tài)是否變化,如果熱詞典狀態(tài)變化則進入步驟120。優(yōu)選的,所述監(jiān)控各熱詞典的狀態(tài)是否變化包括:子步驟111,監(jiān)控各熱詞典是否被更新。熱詞典被更新后,熱詞典的狀態(tài)則會變化。比如對于廣告競價詞熱詞典,各個廣告商在廣告平臺中購買不同的廣告競價詞,那么新的廣告競價詞、原廣告競價詞的新屬性(所述屬性新價格、對應的廣告商等),那么熱詞典的狀態(tài)則會變化?;蛘吆笈_由技術人員控制更新熱詞典,那么熱詞典的狀態(tài)則 會變化。其中,所述更新包括對熱詞典的修改、增加、刪除等操作。而對于服務來說,其需要把熱詞典中的數(shù)據(jù)加載到其內存中,其只是加載的當前時刻的熱詞典的數(shù)據(jù),對于熱詞典更新后的數(shù)據(jù)則不能使用。比如目標服務在2015-10-15的10:00:00加載了熱詞典的數(shù)據(jù),而熱詞典在10:10:00被更新,那么目標服務A使用的還是10:00:00加載的熱詞典的數(shù)據(jù),對于熱詞典的更新的數(shù)據(jù)則無法使用。因此,為了避免該種情況,則會進入步驟120。可以理解,熱詞典與服務是相對獨立,熱詞典可以理解為一個庫文件,熱詞典為服務提供數(shù)據(jù)支持,服務加載熱詞典時是將其當前的庫文件中的內容加載到服務的內存中,熱詞典的更新則與服務加載的數(shù)據(jù)無關,熱詞典獨立更新。因此,對于一個或多個服務來說,在其使用的熱詞典更新后,服務需要重新加載新的熱詞典中的數(shù)據(jù)才能保證數(shù)據(jù)的及時性。優(yōu)選的,在本發(fā)明另外一種實施例中,所述監(jiān)控各熱詞典的狀態(tài)是否變化的步驟,包括:子步驟112,通過調用inotifyAPI監(jiān)控各熱詞典的狀態(tài)是否變化。對于各熱詞典的監(jiān)控,如果對每個熱詞典創(chuàng)建一個線程,通過該線程去輪詢監(jiān)控熱詞典的時間戳的形式,以獲取該熱詞典的狀態(tài),并確定變化和未變化的結果。需要不斷去獲取熱詞典的狀態(tài)變化結果,開銷大,資源占用量高。為了進一步解決該問題,本發(fā)明實施例則調用inotifyAPI監(jiān)控各熱詞典的狀態(tài)是否變化,在內核層對熱詞典的文件狀態(tài)變化進行監(jiān)控。InotifyAPI(inotifyApplicationProgramInterface,inotify應用程序接口),其是一個Linux內核特性,它監(jiān)控文件系統(tǒng)事件,并且及時發(fā)出相關的事件通知。在本發(fā)明實施例中,對于一個熱詞典的監(jiān)控請求任務,線程池每個工作線程則調用InotifyAPI,由該InotifyAPI去監(jiān)控熱詞典的狀態(tài)變化,并將狀態(tài)變化結果返回給線程池池的結果隊列。進一步的,所述通過調用inotifyAPI監(jiān)控各熱詞典的狀態(tài)是否變化的步驟包括:子步驟S11,對每個熱詞典,通過inotifyAPI中的初始化函數(shù)inotify_init()初始化文件變化監(jiān)視器,并返回文件描述符;在本發(fā)明實施例中,由一個工作線程,該工作線程對一熱詞典,先調用inotifyAPI時,首先調用其中的初始化函數(shù)inotify_init()在內核中創(chuàng)建針對inotify實例,初始化文件變化監(jiān)視器,成功的話將返回該熱詞典的文件描述符,失敗則返回-1。子步驟S12,通過inotifyAPI中的文件變化監(jiān)視器添加函數(shù)inotify_add_watch(),為所述文件描述符注冊一個文件變化監(jiān)視器;在inotifyAPI中初始化函數(shù)inotify_init()初始化文件變化監(jiān)視器后,該文件變化監(jiān)視器還未設置監(jiān)視對象,那么在初始化文件變化監(jiān)視器,并成功獲取到熱詞典的文件描述符后,再調用inotifyAPI中inotify_add_watch()為子步驟S11中得到文件變化監(jiān)視器注冊給該文件描述符,為該文件變化監(jiān)視器提供包括提供熱詞典文件的路徑名,和需要監(jiān)控的相關事件的列表等信息其中,在本發(fā)明實施例中,該需要監(jiān)控的相關事件的列表包括文件更新事件。因為所有對文件的添加、刪除、修改等更新操作的事件,都,那么本發(fā)明實施例只需要由在在內核層中的文件變化監(jiān)視器監(jiān)控熱詞典的文件,然后將監(jiān)控結果告知應用層的線程池熱詞典的文件變化結果即可。。當然,實際應用中,上述相關事件可以直接包括對文件的添加、刪除、更新等事件。那么則文件變化監(jiān)視器可以直接監(jiān)控上述事件以確定對熱詞典的變化狀態(tài)。在實際應用中,文件變化監(jiān)視器添加了之后,則可以調用read()函數(shù)從描述符獲取上述列表中的事件信息。子步驟S13,當通過所述文件變化監(jiān)視器監(jiān)控到熱詞典狀態(tài)變化事件之后,返回熱詞典的狀態(tài)變化消息。在文件變化監(jiān)視器監(jiān)控到上述列表中的事件之后,則會根據(jù)熱詞典的事件信息生產熱詞典的狀態(tài)變化消息。比如在內核層監(jiān)控到文件的修改事件那么則生成熱詞典的狀態(tài)變化消息,并將該狀態(tài)變化消息消息返回應用層的線程池。在實際應用中,線程池基于該生產狀態(tài)已變化消息通過添加請求的方法(putRequest)向請求隊列(RequestQueue)添加各請求任務,每個請求任務用于對一目標服務使用的熱詞典進行熱更新。步驟120,如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。在本發(fā)明實施例中,對于監(jiān)控的各個熱詞典,如果某個或者某幾個熱詞典的狀態(tài)已變化,則可以將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。在實際應用中,上述熱更新可以通過多種方式實現(xiàn),比如通過Lua語言的require函數(shù),可以將目標服務當前加載的熱詞典的文件中的數(shù)據(jù),替換為熱詞典文件中的新數(shù)據(jù)。當然,也可采用其他語言的實現(xiàn)熱更新,本發(fā)明不對其加以限制。優(yōu)選的,在本發(fā)明另外一種實施例中,所述監(jiān)控各熱詞典的狀態(tài)是否變化的步驟,包括:子步驟121,通過線程池監(jiān)并行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。在實際應用中,因為熱詞典有多個,可以為每個熱詞典創(chuàng)建一個線程去執(zhí)行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典的過程。比如有100個熱詞典,可以創(chuàng)建100個線程去執(zhí)行上述熱更新的過程。但是上述方式,由于需要為每個熱詞典創(chuàng)建一個線程,各個線程之間是獨立的,其開銷大,不方便線程的統(tǒng)一管理。為了解決為每個熱詞典創(chuàng)建一個線程,導致開銷大、不方便統(tǒng)一管理的問題,本發(fā)明實施例則創(chuàng)建了一個線程池,通過線程池監(jiān)并行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。在實際應用中,一個典型的線程池,應該包括如下幾個部分:1、線程池管理器(ThreadPool),用于啟動、停用,管理線程池。2、工作線程(WorkThread),線程池中的線程。3、請求接口(WorkRequest),創(chuàng)建請求對象,以供工作線程調度任務 的執(zhí)行。4、請求隊列(RequestQueue),用于存放和提取請求5、結果隊列(ResultQueue),用于存儲請求執(zhí)行后返回的結果如圖1A,其為線程池工作模型。線程池管理器(ThreadPool),通過添加請求的方法(putRequest)向請求隊列(RequestQueue)添加請求任務,上述請求任務事先需要實現(xiàn)請求接口(WorkRequest),即傳遞工作函數(shù)、參數(shù)、結果處理函數(shù)、以及異常處理函數(shù)。之后線程池管理器(ThreadPool)初始化一定數(shù)量的工作線程(WorkThread),并在后續(xù)的使用過程中增加或者停用工作線程。上述各個工作線程(WorkThread)通過輪詢的方式不斷查看請求隊列(RequestQueue),只要請求隊列(RequestQueue)中有請求任務存在,則會提取出請求任務,進行執(zhí)行,工作線程(WorkThread)將執(zhí)行結果放置到結果隊列(ResultQueue)。然后,線程池管理器調用方法(poll)查看結果隊列(resultQueue)是否有值,如果有值,則取出,調用相應的結果處理函數(shù)執(zhí)行。上述過程中,工作線程通過輪詢請求隊列(RequestQueue)獲得請求任務,線程池管理器(ThreadPool)通過查看結果隊列(ResultQueue),獲得執(zhí)行結果。優(yōu)選的,所述將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典包括:子步驟122,由線程池接收所述熱詞典的狀態(tài)變化消息;子步驟123,根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,針對需要使用所述熱詞典的目標服務,將所述目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。在本發(fā)明實施例中,線程池管理器(ThreadPool)對于每個熱詞典的熱詞典的狀態(tài)變化消息,創(chuàng)建一個熱更新請求任務,然后將該熱更新請求任務放入請求隊列(RequestQueue),并創(chuàng)建一定個數(shù)的工作線程。各個工作線程則輪詢該隊列,從中提取熱更新請求任務執(zhí)行,將其執(zhí)行的結果(該結果如比如狀態(tài)未變化,狀態(tài)已變化)放入結果隊列(resultQueue)。線程池管理器(ThreadPool)調用方法(poll)查看結果隊列(resultQueue)是否有值, 如果有值,則取出,調用相應的結果處理函數(shù)執(zhí)行。當然,在實際應用中,不同的目標服務可能使用不同的熱詞典,那么本發(fā)明實施例中可以預先配置一張目標服務與熱詞典的對應表,該表中記錄了熱詞典與需要使用該熱詞典的目標服務的進程/線程名,如表(一):熱詞典目標服務黑名單詞典目標服務1、目標服務3、目標服務5白名單詞典目標服務1、目標服務3、目標服務5廣告競價詞詞典目標服務1、目標服務2、目標服務4表(一)那么,在監(jiān)控到一個熱詞典狀態(tài)變化后,則根據(jù)上述表通知相應的目標服務,去將正在使用的熱詞典的數(shù)據(jù)熱更新為狀態(tài)變化后的熱詞典的數(shù)據(jù)。優(yōu)選的,所述將當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典的步驟包括:子步驟124,將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù);子步驟125,通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載。在實際應用中,本發(fā)明實施例可以在服務中設置熱更新邏輯,該熱更新邏輯可以在接收到對其使用的熱詞典的狀態(tài)變化通知后,先將所述目標服務對所述熱詞典的加載記錄設置為空,即在目標服務的注冊列表中對所述熱詞典的文件的加載記錄設置為空。那么對于目標服務來說,由于對熱詞典的加載記錄設置為空,因而其需要重新加載該熱詞典。比如對于前述require函數(shù),目標服務會在registry["_LOADED"]表中判斷是否已經(jīng)加載過熱詞典。如果熱詞典已經(jīng)加載過,則會在registry["_LOADED"]表中記錄,那么,此時調用require函數(shù)則不會在加載熱詞典,因為已經(jīng)記錄加載過了。在本發(fā)明實施例中,則將registry["_LOADED"]表中對狀態(tài)已變化通知 對應的熱詞典的注冊值賦空,表示該熱詞典未被加載過,然后再調用require函數(shù),從指定存儲位置加載該狀態(tài)變化后的熱詞典,那么即可實現(xiàn)將當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典的過程。當然,本發(fā)明實施例中,也可以由目標服務本身創(chuàng)建線程池,對目標服務本身使用的各種熱詞典進行熱更新。本發(fā)明實施例可以監(jiān)控各個熱詞典的狀態(tài)是否變化,如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典,解決了需要重啟服務才能使用最新狀態(tài)下的熱詞典的問題,取得了不用重啟服務即可更新各服務使用的熱詞典,從而避免在線服務的暫停,使用戶可以不中斷對服務的訪問。實施例二參照圖2,其示出了本發(fā)明實施例的一種熱詞典切換方法的流程示意圖,具體可以包括:步驟210,適于通過調用inotifyAPI,監(jiān)聽各熱詞典的狀態(tài)是否變化,并在內核層將熱詞典的狀態(tài)變化消息返回應用層的線程池;在本發(fā)明實施例中,可以預先創(chuàng)建一個線程池,通過該線程池中的工作線程去調用inotifyAPI,以在內核層監(jiān)控各熱詞典的狀態(tài)是否變化。在實際應用中調用inotifyAPI可執(zhí)行以下步驟:子步驟S211,對每個熱詞典,通過inotifyAPI中的初始化函數(shù)inotify_init()初始化文件變化監(jiān)視器,并返回文件描述符;子步驟S212,通過inotifyAPI中的文件變化監(jiān)視器添加函數(shù)inotify_add_watch(),為所述文件描述符注冊一個文件變化監(jiān)視器;子步驟S213,當通過所述文件變化監(jiān)視器監(jiān)控到熱詞典狀態(tài)變化事件之后,返回狀態(tài)變化消息至線程池。步驟220,由線程池接收所述熱詞典的狀態(tài)變化消息;步驟230,線程池根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù);;線程池的線程池管理器(ThreadPool)根據(jù)狀態(tài)變化消息,添加請求的方法(putRequest)向請求隊列(RequestQueue)添加熱更新請求任務,然后工作線程則從請求隊列(RequestQueue)提取熱更新請求任務執(zhí)行,其執(zhí)行將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù),以及通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載的過程。工作線程先將所述目標服務對所述熱詞典的加載記錄設置為空,即在目標服務的注冊列表中對所述熱詞典的文件的加載記錄設置為空。那么對于目標服務來說,由于對熱詞典的加載記錄設置為空,因而其需要重新加載該熱詞典。比如對于前述require函數(shù),目標服務會在registry["_LOADED"]表中判斷是否已經(jīng)加載過熱詞典。如果熱詞典已經(jīng)加載過,則會在registry["_LOADED"]表中記錄,那么,此時調用require函數(shù)則不會在加載熱詞典,因為已經(jīng)記錄加載過了。在本發(fā)明實施例中,則將registry["_LOADED"]表中對狀態(tài)已變化通知對應的熱詞典的注冊值賦空,表示該熱詞典未被加載過,然后再調用require函數(shù)。步驟240,由所述工作線程通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載。如前述例子,重新調用require函數(shù)后,則可以從存儲位置加載狀態(tài)變化后的熱詞典的庫文件,重新在registry["_LOADED"]表中記錄該熱詞典已加載。本發(fā)明實施例可以監(jiān)控各個熱詞典的狀態(tài)是否變化,如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典,解決了需要重啟服務才能使用最新狀態(tài)下的熱詞典的問題,取得了不用重啟服務即可更新各服務使用的熱詞典,從而避免在線服務的暫停,使用戶可以不中斷對服務的訪問。其次,本發(fā)明實施例通過線程池實現(xiàn)并行的熱更新過程,不用在熱更新 時單獨為每個熱詞典創(chuàng)建一個線程去執(zhí)行熱更新,降低開銷。再者,通過inotifyAPI實現(xiàn)監(jiān)聽到熱詞典狀態(tài)變化后,才主動返回狀態(tài)變化消息,不用為每個熱詞典創(chuàng)建一個線程,也不用線程去輪詢熱詞典的狀態(tài)變化,降低開銷。實施例三參照圖3,其示出了本發(fā)明實施例的一種熱詞典切換裝置的結構示意圖,具體可以包括:監(jiān)控模塊310,適于監(jiān)控各熱詞典的狀態(tài)是否變化;熱詞典切換模塊320,適于如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述熱詞典切換模塊包括:線程池監(jiān)控模塊,適于通過線程池監(jiān)并行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述監(jiān)控模塊包括:接口監(jiān)聽模塊,適于通過調用inotifyAPI,監(jiān)聽各熱詞典的狀態(tài)是否變化。優(yōu)選地,所述接口監(jiān)聽模塊包括:文件描述符獲取模塊,適于對每個熱詞典,通過inotifyAPI中的初始化函數(shù)inotify_init()初始化文件變化監(jiān)視器,并返回文件描述符;(同上)文件變化監(jiān)視器添加模塊,適于通過inotifyAPI中的文件變化監(jiān)視器添加函數(shù)inotify_add_watch(),為所述文件描述符注冊一個文件變化監(jiān)視器;(同上)返回模塊,適于當通過所述文件變化監(jiān)視器監(jiān)控到熱詞典狀態(tài)變化事件之后,返回熱詞典的狀態(tài)變化消息。優(yōu)選地,所述熱詞典切換模塊包括:消息接收模塊,適于由線程池接收所述熱詞典的狀態(tài)變化消息;第一切換模塊,適于根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,針對需要使用所述熱詞典的目標服務,將所述目標服務當前使用的 熱詞典熱更新為狀態(tài)變化后的所述熱詞典。優(yōu)選地,所述監(jiān)控模塊包括:監(jiān)控各熱詞典是否被更新。本發(fā)明實施例可以監(jiān)控各個熱詞典的狀態(tài)是否變化,如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典,解決了需要重啟服務才能使用最新狀態(tài)下的熱詞典的問題,取得了不用重啟服務即可更新各服務使用的熱詞典,從而避免在線服務的暫停,使用戶可以不中斷對服務的訪問。實施例四參照圖4,其示出了本發(fā)明實施例的一種熱詞典切換裝置的結構示意圖,具體可以包括:監(jiān)控模塊410,具體包括:接口監(jiān)聽模塊411,適于通過調用inotifyAPI,監(jiān)聽各熱詞典的狀態(tài)是否變化,并在內核層將熱詞典的狀態(tài)變化消息返回應用層的線程池;熱詞典切換模塊420,具體包括:消息接收模塊421,適于由線程池接收所述熱詞典的狀態(tài)變化消息;。卸載模塊422,適于根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù);重加載模塊423,適于由所述工作線程通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載。本發(fā)明實施例可以監(jiān)控各個熱詞典的狀態(tài)是否變化,如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典,解決了需要重啟服務才能使用最新狀態(tài)下的熱詞典的問題,取得了不用重啟服務即可更新各服務使用的熱詞典,從而避免在線服務的暫停,使用戶可以不中斷對服務的訪問。其次,本發(fā)明實施例通過線程池實現(xiàn)并行的熱更新過程,不用在熱更新時單獨為每個熱詞典創(chuàng)建一個線程去執(zhí)行熱更新,降低開銷再者,通過inotifyAPI實現(xiàn)監(jiān)聽到熱詞典狀態(tài)變化后,才主動返回狀態(tài)變化消息,不用為每個熱詞典創(chuàng)建一個線程,也不用線程去輪詢熱詞典的狀態(tài)變化,降低開銷。實施例五參照圖5,其示出了本發(fā)明實施例的一種熱詞典切換設備的結構示意圖,所述熱詞典切換設備500具體可以包括:存儲器510和處理器520;所述存儲器用于存儲可執(zhí)行代碼;所述處理器用于執(zhí)行所述可執(zhí)行代碼,所述可執(zhí)行代碼執(zhí)行包括以下步驟的方法:監(jiān)控各熱詞典的狀態(tài)是否變化;如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。當然,所述可執(zhí)行代碼還可以執(zhí)行前述任意步驟的方法,本發(fā)明實施例不對其加以限制。在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設備固有相關。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構造這類系統(tǒng)所要求的結構是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解, 本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。類似地,應當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發(fā)明的單獨實施例。本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的熱詞典切換設備中的一些或者全部部件的一些或者全 部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。應該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。A1、一種熱詞典切換方法,包括:監(jiān)控各熱詞典的狀態(tài)是否變化;如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。A2、根據(jù)B1所述的方法,所述將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典的步驟,包括:通過線程池監(jiān)并行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。A3、根據(jù)A1所述的方法,所述監(jiān)控各熱詞典的狀態(tài)是否變化的步驟包括:通過調用inotifyAPI監(jiān)控各熱詞典的狀態(tài)是否變化。A4、根據(jù)A3所述的方法,所述通過調用inotifyAPI監(jiān)控各熱詞典的狀態(tài)是否變化的步驟包括:對每個熱詞典,通過inotifyAPI中的初始化函數(shù)inotify_init()初始化文 件變化監(jiān)視器,并返回文件描述符;通過inotifyAPI中的文件變化監(jiān)視器添加函數(shù)inotify_add_watch(),為所述文件描述符注冊一個文件變化監(jiān)視器;當通過所述文件變化監(jiān)視器監(jiān)控到熱詞典狀態(tài)變化事件之后,返回熱詞典的狀態(tài)變化消息。A5、根據(jù)B4所述的方法,所述將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典包括:由線程池接收所述熱詞典的狀態(tài)變化消息;根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,針對需要使用所述熱詞典的目標服務,將所述目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。A6、根據(jù)A1所述的方法,所述監(jiān)控各熱詞典的狀態(tài)是否變化包括:監(jiān)控各熱詞典是否被更新。A7、根據(jù)A1-A5其中之一所述的方法,所述將當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典的步驟包括:將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù);通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載。本發(fā)明還公開了B8、一種熱詞典切換裝置,包括:監(jiān)控模塊,適于監(jiān)控各熱詞典的狀態(tài)是否變化;熱詞典切換模塊,適于如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。B9、根據(jù)B8所述的裝置,所述熱詞典切換模塊包括:線程池監(jiān)控模塊,適于通過線程池監(jiān)并行將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。B10、根據(jù)B8所述的裝置,所述監(jiān)控模塊包括:接口監(jiān)聽模塊,適于通過調用inotifyAPI,監(jiān)聽各熱詞典的狀態(tài)是否變化。B11、根據(jù)B10所述的裝置,所述接口監(jiān)聽模塊包括:文件描述符獲取模塊,適于對每個熱詞典,通過inotifyAPI中的初始化函數(shù)inotify_init()初始化文件變化監(jiān)視器,并返回文件描述符;文件變化監(jiān)視器添加模塊,適于通過inotifyAPI中的文件變化監(jiān)視器添加函數(shù)inotify_add_watch(),為所述文件描述符注冊一個文件變化監(jiān)視器;返回模塊,適于當通過所述文件變化監(jiān)視器監(jiān)控到熱詞典狀態(tài)變化事件之后,返回熱詞典的狀態(tài)變化消息。B12、根據(jù)B11所述的裝置,所述熱詞典切換模塊包括:消息接收模塊,適于由線程池接收所述熱詞典的狀態(tài)變化消息;第一切換模塊,適于根據(jù)所述狀態(tài)變化消息,利用所述線程池中的各工作線程,針對需要使用所述熱詞典的目標服務,將所述目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。B13、根據(jù)B8所述的裝置,所述監(jiān)控模塊包括:監(jiān)控各熱詞典是否被更新。B14、根據(jù)B8-B12其中之一所述的裝置,所述熱詞典切換模塊包括:卸載模塊,適于將所述目標服務對所述熱詞典的加載記錄設置為空,并觸發(fā)重加載所述熱詞典的加載函數(shù);重加載模塊,適于通過所述加載函數(shù),獲取狀態(tài)變化后的熱詞典并進行加載。本發(fā)明還公開了C15、一種熱詞典切換設備,包括:存儲器和處理器;所述存儲器用于存儲可執(zhí)行代碼;所述處理器用于執(zhí)行所述可執(zhí)行代碼,所述可執(zhí)行代碼執(zhí)行包括以下步驟的方法:監(jiān)控各熱詞典的狀態(tài)是否變化;如果監(jiān)控到一熱詞典的狀態(tài)變化,則將各目標服務當前使用的熱詞典熱更新為狀態(tài)變化后的所述熱詞典。當前第1頁1 2 3