本發明專利技術公開了一種數據庫系統中線程間的模擬信號通信方法,包括:數據庫系統下直接設置一信號管理器,信號管理器中設置并存儲各個線程的線程消息ThreadInfo,在該線程消息ThreadInfo中設置本線程可接收并處理不同信號信息,并設置不同信號對應的標識;在線程開始時注冊本線程各個信號所對應的處理函數信息;當某一線程需要給目標線程發送信號時,在該目標線程的線程消息ThreadInfo中修改該信號對應標識;該目標線程接收該標識,并通過該信號對于應的處理函數進行處理。本發明專利技術實施方式的線程間的模擬信號通信方法,采用類似進程間通信的信號機制,由信號管理器統一管理和調度各線程信號處理函數,去除了代碼中為通信而定義的大量狀態變量,使得各線程的任務單一化,從而使得代碼的更強的可讀性和可維護性,技術方案簡單,方便實用。
【技術實現步驟摘要】
本專利技術涉及通信
,特別涉及。
技術介紹
隨著現代信息產業的不斷深入發展,對于信息的集成和共享的需求也變得日益迫切。為了增大吞吐量,提高CPU的利用率,服務器端的程序一般都會采用多線程技術或者多進程技木。相對于單線程/迸程來說,多進程/線程模式的效率更高,但是隨之而來的,程序復雜性會急劇増大,因為多個線程/進程為了完成特定的功能必須要相互協作,也就是它們需要同步和通信。 在unix系統中,進程間的通信可以通過信號來實現,在進程啟動時,首先調用signal (signo, handle)注冊 信號處理函數,然后等待其他進程發送信號來作出相應的動作。這種機制非常地方便。而對于多線程來說,通常是通過全局變量來實現的,工作線程通過檢測全局變量值的變化來作出相應的動作。這種方式在簡單的應用中已經足夠了,但是在像數據庫系統這種復雜的系統中使用將會使得代碼的可讀性及可維護性下降。這種通過全局狀態變量來通信的做法,對于線程數量少,通信需求不大的情形來說已經足夠了,但是對于數據庫這種復雜的系統來說,這種技術方案主要有以下幾個缺點全局變量泛濫;代碼的可讀性下降;可維護性下降;代碼的復雜性增加,難以測試等。以某ー XML數據庫使用多線程模式為例,其中涉及的線程主要包括I. Mater線程接收客戶端請求,并啟動Backend線程來處理這些請求;2. Backend線程解析并處理客戶端的請求;3. BgWriter線程將對數據庫的改動寫回磁盤;4. WalLogger 線程寫日志這些線程之間的協作需要大量的通信,比如WalLogger線程會通知BgWriter線程,讓其寫磁盤或者是做check point,大多數這種通信都是告知性質的。對于這種情況,為了實現他們之間的通信,就會定義大量的全局狀態變量,比如說,BgWriter為了判斷是否要寫磁盤就需要ー個bool型的全局變量Bool g_bNeedSync2Disk;而WalLogger在需要寫磁盤時就是將這個變量設置成true,從而就達到了通知BgWriter寫磁盤的目的。這種通過全局狀態變量來通信的做法,對于線程數量少,通信需求不太太的情況來說實現起來還方便,但是對于數據庫這種復雜的系統來說,定義過多的全局變量就使得整個系統的代碼可讀性下降、可維護性差。
技術實現思路
為解決上述問題,本專利技術技術方案提供了ー種數據庫管理系統中線程間的模擬信號通信方法,包括數據庫系統下直接設置一信號管理器,信號管理器中設置并存儲各個線程的線程消息Threadlnfo,在該線程消息ThreadInfo中設置本線程可接收并處理不同信號信息,并設置不同信號對應的標識;在線程開始時注冊本線程各個信號所對應的處理函數信息;當某一線程需要給目標線程發送信號時,在該目標線程的線程消息ThreadInfo中修改該信號對應標識;該目標線程接收該標識,并通過該信號對于應的處理函數進行處理。可選地,線程消息ThreadInfo通過位置信息來設置不同信息對應的標識,每一位表示一信號及對應的處理函數;當某一線程需要給該目標線程發送信號時,先找到該目標線程對應的線程消息 Threadlnfo,再找到該信號所在的位置,后將該位置進行修改;當該目標線程處理好該信號后,將該線程消息ThreadInfo對應位置信息重新進行修改。可選地,在該線程消息ThreadInfo中設置一信號隊列signalQueue,該隊列每一位的位置上表示對應的處理函數,每一位置上的數字N表示當前接收到N個線程發送當前處理函數需處理的該信號。可選地,signalQueue有32位,每一位對應一處理函數,并且處理函數的處理結果有兩種狀態。可選地,所述的信號處理器通過設置所述發送線程的信號隊列控制所述發送線程處理模擬信號。與現有技術相比,上述技術方案具有下優點本專利技術實施方式的線程間的模擬信號通信方法,采用類似進程間通信的信號機制,由信號管理器統一管理和調度各線程信號處理函數,去除了代碼中為通信而定義的大量狀態變量,使得各線程的任務單一化,從而使得代碼的更強的可讀性和可維護性,技術方案簡單,方便實用。附圖說明圖I是本專利技術實施方式的數據庫管理系統中線程間的模擬信號通信方法的流程圖;圖2是本專利技術實施方式的數據庫管理系統中線程間的模擬信號通信方法中的信號管理器與數組結構之間的關系示意圖;圖3是本專利技術的實施方式的數據庫管理系統中的線程間的模擬信號通信方法的一個應用例示意圖。具體實施例方式為使本專利技術的上述目的、特征和優點能夠更為明顯易懂,下面結合附圖對本專利技術的具體實施方式做詳細的說明。在以下描述中闡述了具體細節以便于充分理解本專利技術。但是本專利技術能夠以多種不同于在此描述的其它方式來實施,本領域技術人員可以在不違背本專利技術內涵的情況下做類似推廣。因此本專利技術不受下面公開的具體實施方式的限制。本領域的技術人員知道,在unix系統中,進程間的通信可以通過信號來實現,在進程啟動時,首先調用signal (signo, handle)注冊 信號處理函數,然后等待其他進程發送信號來作出相應的動作。這種機制非常地方便。而對于多線程來說,通常是通過全局變量來實現的,工作線程通過檢測全局變量值的變化作出相應的動作。這種方式在簡單的應用中已經足夠了,但是在像數據庫系統這種復雜的系統中使用將會使得代碼的可讀性及可維護性下降。為解決現有技術中的問題,本專利技術的專利技術人經過研究,提出了ー種線程間的模擬信號通信方法。參閱圖1,圖I是本專利技術實施方式的數據庫管理系統中線程間的模擬信號通信方法的流程圖。本專利技術實施方式的線程間的數據庫管理系統中線程間的模擬信號通信方法,包括數據庫系統下直接設置一信號管理器,信號管理器中設置并存儲各個線程的線程消息Threadlnfo,在該線程消息ThreadInfo中設置本線程可接收并處理不同信號信息,并設置不同信號對應的標識; 在線程開始時注冊本線程各個信號所對應的處理函數信息;當某ー線程需要給目標線程發送信號時,在該目標線程的線程消息ThreadInfo中修改該信號對應標識;該目標線程接收該標識,并通過該信號對于應的處理函數進行處理。下面結合說明書附圖對本專利技術實施方式的線程間的模擬信號通信方法做進ー步詳細的說明。應用例,包括Sll :數據庫系統下直接設置一信號管理器,信號管理器中設置并存儲各個線程的線程消息Threadlnfo,在該線程消息ThreadInfo中設置本線程可接收并處理不同信號信息,并設置不同信號對應的標識。信號管理器直接設置在系統下面,其可以為一大數組或ー隊列。各個線程設置ー線程消息Threadlnfo。信號管理器為姆個線程維護著ー個結構Threadlnfo。還請參閱圖2,其給出的是ー個最多支持256個線程通信的實例,同進從圖中可以看出,當前一共管理著兩個線程的通信信息。其中Threadlnfo的定義的實例如下typedef void (ThreadsigHandler*) (int signo ); struct ThreadInfo { pthread_t tid:// tid of this thread pthread_mutex_t mut;//protect the access to signalQueue pthread—co本文檔來自技高網...
【技術保護點】
一種數據庫系統中線程間的模擬信號通信方法,其特征在于,包括:數據庫系統下直接設置一信號管理器,所述信號管理器中設置并存儲各個線程的線程消息ThreadInfo,在該線程消息ThreadInfo中設置本線程可接收并處理不同信號信息,并設置不同信號對應的標識;在線程開始時注冊本線程各個信號所對應的處理函數信息;當某一線程需要給目標線程發送信號時,在該目標線程的線程消息ThreadInfo中修改該信號的對應標識;該目標線程接收該標識,并通過該信號對相應的處理函數進行處理。
【技術特征摘要】
【專利技術屬性】
技術研發人員:李書淦,李浩,趙偉,鄭程光,孫偉豐,羅正海,李泉,程仁波,
申請(專利權)人:上海方正數字出版技術有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。