跨進程的資源共享方法和設備的制作方法
【專利摘要】本發(fā)明的實施方式提供了一種跨進程的資源共享方法和設備。所述方法包括:與同一個程序的多個進程實現(xiàn)進程間通信;響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件;為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中;將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。當同一個程序的多個進程對資源文件的需求相同時,本發(fā)明的方法可以節(jié)約IO操作、CPU時間以及內存空間。此外,本發(fā)明的另一方面提供了一種跨進程的資源共享的設備,例如,客戶端上安裝的軟件。
【專利說明】跨進程的資源共享方法和設備
【技術領域】
[0001]本發(fā)明的實施方式涉及數(shù)據(jù)存儲領域,更具體地,本發(fā)明的實施方式涉及跨進程的資源共享方法和設備。
【背景技術】
[0002]本部分旨在為權利要求書中陳述的本發(fā)明的實施方式提供背景或上下文。此處的描述可包括可以探究的概念,但不一定是之前已經想到或者已經探究的概念。因此,除非在此指出,否則在本部分中描述的內容對于本申請的說明書和權利要求書而言不是現(xiàn)有技術,并且并不因為包括在本部分中就承認是現(xiàn)有技術。
[0003]在一臺電腦上,往往會同時運行一個程序的多個進程,例如,游戲玩家為了多個游戲賬號下的不同角色之間的交互,或者,為了同時玩多個不同的角色,就會運行一個游戲程序的多個進程。
[0004]在現(xiàn)有技術中,每個進程都擁有自己專屬的一個內存空間,當某個進程需要資源文件時,該進程會調用一個資源管理模塊,該資源管理模塊將資源文件從物理磁盤載入到該進程專屬的內存空間。
【發(fā)明內容】
[0005]但是,本發(fā)明人在研究過程中發(fā)現(xiàn),在現(xiàn)有技術中,一個程序的多個進程對資源文件的需求通常是相同,即,一個程序的多個進程通常需要的資源文件是相同的。例如,當一個程序的多個進程都需要資源文件A時,對于每一個進程而言,都會調用一次資源管理模塊,并由資源管理模塊將資源文件A從物理磁盤載入到每一個進程各自的內存空間中。也就是說,資源管理模塊會重復多次地對資源文件A執(zhí)行載入操作。其中,資源管理模塊在每次載入過程中都要執(zhí)行如下操作:從物理磁盤讀取經過編碼處理的資源文件,對讀取的資源文件進行解碼,將解碼后的資源文件寫入到每個進程各自的內存空間。
[0006]因此依照現(xiàn)有技術,在資源管理模塊從物理磁盤讀取經過編碼處理的資源文件的過程中,會消耗IO操作;在資源管理模塊對讀取的資源文件進行解碼的過程中,也會消耗CPU時間;在資源管理模塊將解碼后的資源文件寫入到每個進程各自的內存空間的過程中,還會消耗內存空間。如果資源管理模塊重復多次地對相同的資源文件執(zhí)行讀取、解碼和存儲操作時,必然會消耗大量的IO操作、CPU時間和內存空間。特別是在一個程序同時運行大量進程的情況下,而對IO操作、CPU時間以及內存空間的損耗問題就變得更加嚴重。
[0007]為此,非常需要一種跨進程的集中的資源管理共享方法和設備,以解決現(xiàn)有技術中當同一個程序的多個進程對資源文件的需求相同時,會消耗大量的IO操作、CPU時間以及內存這一技術問題。
[0008]在本上下文中,本發(fā)明的實施方式期望提供一種實現(xiàn)跨進程的資源共享方法和設備。
[0009]在本發(fā)明實施方式的第一方面中,提供了一種實現(xiàn)跨進程的資源共享方法,包括:與同一個程序的多個進程實現(xiàn)進程間通信;響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件;為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中;將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
[0010]在本發(fā)明實施方式的第二方面中,提供了一種實現(xiàn)跨進程的資源共享設備,包括:進程間通信單元,用于與同一個程序的多個進程實現(xiàn)進程間通信;資源文件確定單元,用于響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件;資源文件載入單元,用于為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中;資源文件地址返回單元,用于將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
[0011]在本發(fā)明實施方式中,由于為目標資源文件分配了一塊共享內存區(qū)域,而共享內存區(qū)域允許被同一個程序的多個進程訪問,因此,只需執(zhí)行一次將目標資源文件載入到共享內存區(qū)域的操作,而無需重復執(zhí)行將目標資源文件分別載入到多個進程各自的內存空間的操作。從而,當同一個程序的多個進程對資源文件的需求相同時,可以節(jié)約IO操作、CPU時間以及內存空間。
【專利附圖】
【附圖說明】
[0012]通過參考附圖閱讀下文的詳細描述,本發(fā)明示例性實施方式的上述以及其他目的、特征和優(yōu)點將變得易于理解。在附圖中,以示例性而非限制性的方式示出了本發(fā)明的若干實施方式,其中:
[0013]圖1示意性地示出了本發(fā)明的實施方式的一個示例性應用場景;
[0014]圖2示意性地示出了根據(jù)本發(fā)明的一個實施方式的跨進程的資源共享的方法的流程圖;
[0015]圖3示意性地示出了根據(jù)本發(fā)明的一個實施方式的基于共享內存實現(xiàn)進程間通信的方法的流程圖;
[0016]圖4示意性地示出了根據(jù)本發(fā)明的另一個實施方式的跨進程的資源共享的方法的流程圖;
[0017]圖5示意性地示出了根據(jù)本發(fā)明一個實施方式的跨進程的資源共享設備的結構框架圖。
[0018]在附圖中,相同或對應的標號表不相同或對應的部分。
【具體實施方式】
[0019]下面將參考若干示例性實施方式來描述本發(fā)明的原理和精神。應當理解,給出這些實施方式僅僅是為了使本領域技術人員能夠更好地理解進而實現(xiàn)本發(fā)明,而并非以任何方式限制本發(fā)明的范圍。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠將本公開的范圍完整地傳達給本領域的技術人員。
[0020]本領域技術技術人員知道,本發(fā)明的實施方式可以實現(xiàn)為一種系統(tǒng)、裝置、設備、方法或計算機程序產品。因此,本公開可以具體實現(xiàn)為以下形式,即:完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等),或者硬件和軟件結合的形式。
[0021]根據(jù)本發(fā)明的實施方式,提出了一種實現(xiàn)跨進程的資源共享的方法和設備。
[0022]在本文中,需要理解的是,附圖中的任何元素數(shù)量均用于示例而非限制,以及任何命名都僅用于區(qū)分,而不具有任何限制含義。
[0023]下面參考本發(fā)明的若干代表性實施方式,詳細闡釋本發(fā)明的原理和精神。
[0024]發(fā)明概沭
[0025]本發(fā)明人發(fā)現(xiàn),同一個程序的多個進程所需的資源文件通常是相同的,對于每一個進程而言,其會各自調用一次資源管理模塊,以便由資源管理模塊將資源文件從物理磁盤載入到每一個進程各自的內存空間中。也就是說,資源管理模塊會重復多次地對相同的資源文件執(zhí)行載入操作,并且,每次載入過程都要執(zhí)行如下操作:從物理磁盤讀取經過編碼處理的資源文件,對讀取的資源文件進行解碼,將解碼后的資源文件寫入到每個進程各自的內存空間。由于從物理磁盤讀取經過編碼處理的資源文件的過程會消耗IO操作,對讀取的資源文件進行解碼的過程中會消耗CPU時間,將解碼后的資源文件寫入到每一個進程各自的內存空間的過程會消耗內存空間,因此,當資源管理模塊在多個進程的調用下,重復多次地對相同的資源文件執(zhí)行載入操作時,必然會消耗大量的IO操作、CPU時間以及內存空間。
[0026]如果針對同一個程序的多個進程所需的相同的資源文件,只進行一次載入操作,就可以節(jié)約因重復多次載入操作而消耗的IO操作、CPU時間以及內存空間。
[0027]在介紹了本發(fā)明的基本原理之后,下面具體介紹本發(fā)明的各種非限制性實施方式。
[0028]應用場景總覽
[0029]首先參考圖1,圖1示意性地示出了本發(fā)明的實施方式的一個示例性應用場景。其中,在客戶端(例如,臺式機)10上,運行了同一個程序的多個需求進程11 (附圖中的一個僅為示例)和一個中心進程12。中心進程12響應于需求進程11對資源文件的獲取請求,先在客戶端10上為資源文件分配一塊共享內存區(qū)域13,然后將資源文件從物理磁盤載入到共享內存區(qū)域13中,最后將共享內存區(qū)域13的映射地址返回給需求進程11 ;需求進程11根據(jù)共享內存區(qū)域13的映射地址從共享內存區(qū)域13中讀取資源文件。本領域技術人員可以理解,圖1所示的示意圖僅是本發(fā)明的實施方式可以在其中得以實現(xiàn)的一個示例。本發(fā)明實施方式的適用范圍不受到該框架任何方面的限制。
[0030]示例性方法
[0031]下面結合圖1的應用場景,參考圖2來描述根據(jù)本發(fā)明示例性實施方式的、用于實現(xiàn)跨進程的資源共享的方法。需要注意的是,上述應用場景僅是為了便于理解本發(fā)明的精神和原理而示出,本發(fā)明的實施方式在此方面不受任何限制。相反,本發(fā)明的實施方式可以應用于適用的任何場景。
[0032]請參閱圖2,其示意性地示出了根據(jù)本發(fā)明的一個實施方式的跨進程的資源共享的方法的流程圖,方法具體例如可以包括:
[0033]步驟201:與同一個程序的多個進程實現(xiàn)進程間通信。
[0034]目前,實現(xiàn)進程間通信的方式有很多,例如,可以通過系統(tǒng)窗口消息實現(xiàn)進程間通信,或者,也可以通過網(wǎng)絡協(xié)議時間進程間通信。
[0035]除此之外,根據(jù)本發(fā)明的第一個優(yōu)選方式,還可以基于共享內存實現(xiàn)進程間通信。
[0036]圖3示意性地示出了根據(jù)本發(fā)明的一個實施方式的基于共享內存實現(xiàn)進程間通信的方法的流程圖,方法具體例如可以包括:
[0037]步驟301:為所述多個進程創(chuàng)建一塊內存共享區(qū)域作為初始通信區(qū),并為所述初始通信區(qū)創(chuàng)建一個事件內核對象作為第一事件內核對象。
[0038]中心進程創(chuàng)建一塊內存共享區(qū)域作為初始通信區(qū),同一個程序的多個需求進程共用該初始通信區(qū)。并且,該初始通信區(qū)具有一個約定名字。
[0039]在創(chuàng)建初始通信區(qū)的過程中,中心進程映射該初始通信區(qū)的共享內存,并得到初始通信區(qū)的映射地址。通過初始通信區(qū)的映射地址,中心進程既可以從初始通信區(qū)中讀取數(shù)據(jù),也可以向初始通信區(qū)寫入數(shù)據(jù)。
[0040]另外,第一事件內核對象也具有一個約定名字。
[0041]步驟302:響應于所述第一事件內核對象的通知消息,從所述初始通信區(qū)中讀取所述多個進程的身份標識,所述第一事件內核對象的通知消息是所述多個進程中當前新加入的進程將自己身份標識寫入到所述初始通信區(qū)中時觸發(fā)的。
[0042]下面將以需求進程I為當前新加入的進程為例,說明以下各步驟的執(zhí)行過程。
[0043]需求進程I通過初始通信區(qū)的約定名字映射初始通信區(qū)的共享內存,并得到初始通信區(qū)的映射地址。通過初始通信區(qū)的映射地址,需求進程I既可以從初始通信區(qū)中讀取數(shù)據(jù),也可以向初始通信區(qū)寫入數(shù)據(jù)。
[0044]其中,需求進程I將自身的身份標識寫入到初始通信區(qū)中,寫入完畢后觸發(fā)第一事件內核對象的通知消息,中心進程在接收到第一事件內核對象的通知消息后,從初始通信區(qū)中讀取需求進程I的身份標識。
[0045]步驟303:根據(jù)讀取的所述多個進程中當前新加入的進程的身份標識為所述多個進程中當前新加入的進程分別分配一塊共享內存區(qū)域作為進程通信區(qū),并為所述進程通信區(qū)創(chuàng)建一個事件內核對象作為第二事件內核對象。
[0046]當中心進程從初始通信區(qū)中讀取出需求進程I的身份標識后,為需求進程I分配一塊共享內存區(qū)域作為進程通信區(qū)1,并為需求進程I分配一個唯一的索引號。
[0047]在為需求進程I分配進程通信區(qū)I的過程中,中心進程映射該進程通信區(qū)I的共享內存,并得到進程通信區(qū)I的映射地址。通過進程通信區(qū)I的映射地址,中心進程既可以從進程通信區(qū)I中讀取數(shù)據(jù),也可以向進程通信區(qū)I寫入數(shù)據(jù)。
[0048]另外,第二事件內核對象的名字可以為第一事件內核對象的約定名字+需求進程I的索引號。
[0049]步驟304:將所述進程通信區(qū)的映射地址寫入到所述初始通信區(qū),并重置位于所述初始通信區(qū)的第一標志位,被重置的所述第一標志位用于指示所述多個進程中當前新加入的進程已經可以從所述初始通信區(qū)中讀取所述進程通信區(qū)的映射地址,以便基于所述進程通信區(qū)與所述多個進程中當前新加入的進程時間進程間通信。
[0050]中心進程將進程通信區(qū)I的映射地址寫入到初始通信區(qū)中,并且,重置位于初始通信區(qū)的一個標志位。需求進程I一旦發(fā)現(xiàn)初始通信區(qū)中的該標志位被重置,就從初始通信區(qū)讀取進程通信區(qū)I的映射地址。需求進程I通過該進程通信區(qū)I的映射地址,既可以從進程通信區(qū)I中讀取數(shù)據(jù),也可以向進程通信區(qū)I寫入數(shù)據(jù)。
[0051]除了進程通信區(qū)I的映射地址之外,中心進程還將需求進程I的索引號寫入到初始通信區(qū),以便需求進程I從初始通信區(qū)中讀取該索引號。之后,中心進程與需求進程I之間通過進程通信區(qū)I實現(xiàn)進程間通信。
[0052]接著返回圖2。
[0053]步驟202:響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件。
[0054]根據(jù)本發(fā)明的第一個優(yōu)選方式,當基于共享內存實現(xiàn)進程間通信時,響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件具體為:響應于所述第二事件內核對象的通知消息,從所述進程通信區(qū)中讀取目標資源文件的路徑名,根據(jù)所述目標資源文件的路徑名確定所述多個進程中當前請求獲取資源文件的進程請求獲取的目標資源文件,所述第二事件內核對象的通知消息是所述多個進程中當前請求獲取資源文件的進程將所述目標資源文件的路徑名寫入到所述進程通信區(qū)中時觸發(fā)的。
[0055]例如,當需要資源文件A時,需求進程I將資源文件A的路徑名寫入到進程通信區(qū)I中,然后觸發(fā)第二事件內核對象的通知消息,當中心進程接收到第二事件內核對象的通知消息后,從進程通信區(qū)I中讀取資源文件A的路徑名。
[0056]步驟203:為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中。
[0057]例如,中心進程為資源文件A分配一塊共享內存區(qū)域作為資源文件A存儲區(qū),并根據(jù)資源文件A的路徑名從物理磁盤中找到該資源文件A,然后將資源文件A載入到該資源文件A存儲區(qū)中,并得到資源文件A在資源文件A存儲區(qū)中的映射地址。
[0058]當然,在中心進程為資源文件A分配資源文件A存儲區(qū)的過程中,中心進程映射資源文件A存儲區(qū)的共享內存,得到資源文件A存儲區(qū)的映射地址,通過該映射地址,中心進程可以向資源文件A存儲區(qū)寫入資源文件A。
[0059]步驟204:將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
[0060]例如,中心進程將資源文件A存儲區(qū)的映射地址寫入到進程通信區(qū)I中,并重置位于進程通信區(qū)I中的一個標志位,需求進程I 一旦發(fā)現(xiàn)進程通信區(qū)I中的該標志位被重置,就從進程通信區(qū)I讀取資源文件A存儲區(qū)的映射地址。通過資源文件A存儲區(qū)的映射地址,需求進程I就可以進一步從資源文件A存儲區(qū)中讀取資源文件A。
[0061]對于需求進程來說,除了資源文件之外,其運行還要依賴一些用于描述資源文件的輔助信息,如,資源文件的大小和資源文件是否被占用等信息。并且,在有些情況下,即使保存某些資源文件的資源文件存儲區(qū)被釋放,需求進程仍然需要這些資源文件的輔助信息,此時,輔助信息不能與資源文件一同被刪除。
[0062]為了更加方便需求進程獲取這些輔助信息,根據(jù)本發(fā)明的第二個優(yōu)選方式,方法還包括:為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件描述區(qū),所述資源文件描述區(qū)中至少包含所述資源文件存儲區(qū)的映射地址。
[0063]則上述步驟204替換為:將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
[0064]當然,除了所述目標資源文件在所述資源文件存儲區(qū)中的映射地址之外,所述資源文件描述區(qū)還至少包含:目標資源文件的大小和鎖定標識,所述鎖定標識用于指示所述確定的資源文件是否被占用。
[0065]另外,在實際操作中,中心進程可以為目標資源文件分配一個一個資源文件描述區(qū),而資源文件描述區(qū)中資源文件存儲區(qū)的映射地址可以先置空,以及目標資源文件的大小和鎖定標識等輔助信息先寫入到資源文件描述區(qū)中,此時已可以將資源文件描述區(qū)的映射地址返回給需求進程,以便需求進程可以優(yōu)先先根據(jù)資源文件描述的映射地址獲得位于資源文件描述區(qū)中的輔助信息。同時中心進程可以繼續(xù)分配資源文件存儲區(qū),將資源文件載入該區(qū)后,再將映射地址填入資源文件描述區(qū)中存儲區(qū)映射地址段。需求進程會跟蹤資源文件描述區(qū)中的存儲區(qū)映射地址段,一旦發(fā)生改變,可以立即判定出資源文件是否已經被載入存儲區(qū)。
[0066]根據(jù)本發(fā)明的第一個優(yōu)選方式,當基于共享內存實現(xiàn)進程間通信時,將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程具體為:將所述資源文件描述區(qū)的映射地址寫入所述多個進程中當前請求獲取資源文件的進程的進程通信區(qū),并重置位于所述初始通信區(qū)的第二標志位,被重置的所述第二標志位用于指示所述多個進程中當前請求獲取資源文件的進程已經可以從自己的進程通信區(qū)中讀取所述資源文件描述區(qū)的映射地址。
[0067]例如,中心進程為資源文件A分配資源文件A描述區(qū),在資源文件A描述區(qū)中包含有資源文件A存儲區(qū)的映射地址,以及資源文件A的大小和鎖定標識等輔助信息。中心進程將資源文件A描述區(qū)的映射地址寫入到需求進程I的進程通信區(qū)I中,并重置位于初始通信區(qū)的一個標志位,需求進程I 一旦發(fā)現(xiàn)該標志位被重置,就從進程通信區(qū)I中讀取資源文件A描述區(qū)的映射地址。
[0068]對于每一個已經存儲到共享內存的資源文件,當有需求進程需要該資源文件時,為了避免重復載入并更夠更快地向該需求進程反饋結果,根據(jù)本發(fā)明的第三個優(yōu)選方式,還包括:建立所述目標資源文件的路徑名與所述資源文件描述區(qū)的映射地址之間的對應關系,將建立的對應關系保存在預設列表中。
[0069]請參閱圖4,其示意性地示出了根據(jù)本發(fā)明的另一個實施方式的跨進程的資源共享的方法的流程圖,方法具體例如可以包括:
[0070]步驟401:與同一個程序的多個進程實現(xiàn)進程間通信;
[0071]步驟402:響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件;
[0072]步驟403:查詢在預設列表中是否存在所述目標資源文件的路徑名,如果是,進入步驟404,否則,進入步驟406 ;
[0073]步驟404:直接從所述預設列表中讀取與所述目標資源文件的路徑名具有對應關系的所述資源文件描述區(qū)的映射地址;
[0074]步驟405:將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程,結束流程;
[0075]步驟406:為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件描述區(qū)以及分配一塊共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中,所述資源文件描述區(qū)中至少包含所述資源文件存儲區(qū)的映射地址;
[0076]步驟407:將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程;
[0077]步驟408:建立所述目標資源文件的路徑名與所述資源文件描述區(qū)的映射地址之間的對應關系,將建立的對應關系保存在預設列表中,結束流程。
[0078]為了避免資源文件占用過多的共享內存空間,根據(jù)本發(fā)明的第四個優(yōu)選方式,還包括:定期檢查所述資源文件存儲區(qū)中的資源文件的占用狀況,當所述資源文件存儲區(qū)中的資源文件在預設時間段內始終空閑時,釋放所述資源文件存儲區(qū)。
[0079]在具體操作時,中心進程可以定期掃描預設列表中的各資源文件描述區(qū)的映射地址,根據(jù)映射地址定期讀取位于各資源文件描述區(qū)中的鎖定標記,當鎖定標記在連續(xù)幾次都指示資源文件未被占用時,說明該資源文件在預設時間段內始終空閑,中心進程根據(jù)位于資源文件描述區(qū)中的資源文件存儲區(qū)的映射地址,對相應的資源文件存儲區(qū)進行釋放。
[0080]需要說明的是,在本發(fā)明的一個優(yōu)選方式中,可以以固定大小(例如8M)為單位創(chuàng)建共享內存塊。當一個共享內存塊使用完后,再創(chuàng)建一個共享內存塊,以此動態(tài)增加。并且,每個共享內存塊的命名可以為基本約定名_塊索引的方式。例如,基本約定命名為:ShareMemoryForResfile,則第一個被建立的共享內存塊的名字則為ShareMemoryForResfileJ,第二個被建立的共享內存塊的名字就是ShareMemoryForResfiIe_2,以此類推。
[0081]由于同一塊共享內存區(qū)域在不同的進程中,可能會被映射到不同的地址區(qū)段。因此,在本發(fā)明的一個優(yōu)選方式中,可以通過如下方式表達各共享內存區(qū)域的映射地址:先確定該共享內存區(qū)域在第幾個共享內存塊(即,所在共享內存塊的索引號)和在該共享內存塊內的相對地址偏移,然后將所在共享內存塊的索引號和在該共享內存塊內的相對地址偏移合并到一個32位的整形數(shù)據(jù)中,即,高8位記錄共享內存塊的索引號,低24位記錄在該共享內存塊內的相對地址偏移。
[0082]根據(jù)本發(fā)明,由于為目標資源文件分配了一塊共享內存區(qū)域,而共享內存區(qū)域允許被同一個程序的多個進程訪問,因此,只需執(zhí)行一次將目標資源文件載入到共享內存區(qū)域的操作,而無需重復執(zhí)行將目標資源文件分別載入到多個進程各自的內存空間的操作。從而,當同一個程序的多個進程對資源文件的需求相同時,可以節(jié)約IO操作、CPU時間以及內存空間。
_3] 示例性設備
[0084]在介紹了方法之后,接下來,參考圖5,其示意性地示出了根據(jù)本發(fā)明一個實施方式的跨進程的資源共享設備的結構框架圖,來描述用于實現(xiàn)跨進程的資源共享的設備。具體地,該設備例如可以包括:
[0085]進程間通信單元501,用于與同一個程序的多個進程實現(xiàn)進程間通信;
[0086]資源文件確定單元502,用于響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件;
[0087]資源文件載入單元503,用于為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中;[0088]資源文件地址返回單元504,用于將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
[0089]根據(jù)本發(fā)明的一個實施方式,還包括:資源文件描述區(qū)分配單元,用于為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件描述區(qū),所述資源文件描述區(qū)中至少包含所述資源文件存儲區(qū)的映射地址;
[0090]則所述資源文件地址返回單元504具體用于,將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
[0091]根據(jù)本發(fā)明的一個實施方式,還包括:關系存儲單元,用于建立所述目標資源文件與所述資源文件描述區(qū)的映射地址之間的對應關系,將建立的對應關系保存在預設列表中。
[0092]根據(jù)本發(fā)明的一個實施方式,還包括:關系查詢單元,用于在所述資源文件載入單元為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中之前,查詢在所述預設列表中是否存在所述目標資源文件路徑名;
[0093]則所述資源文件載入單元503具體用于,當在所述預設列表中不存在所述目標資源文件的路徑名時,為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中。
[0094]根據(jù)本發(fā)明的一個實施方式,還包括:預設列表讀取單元,用于當在所述預設列表中存在所述目標資源文件的路徑名時,直接從所述預設列表中讀取與所述目標資源文件的路徑名具有對應關系的所述資源文件描述區(qū)的映射地址。
[0095]根據(jù)本發(fā)明的一個實施方式,當在所述預設列表中存在所述目標資源文件的路徑名時,直接從所述預設列表中讀取與所述目標資源文件的路徑名具有對應關系的所述資源文件描述區(qū)的映射地址。
[0096]根據(jù)本發(fā)明的一個實施方式,還包括:釋放單元,用于定期檢查所述資源文件存儲區(qū)中的資源文件的占用狀況,當所述資源文件存儲區(qū)中的資源文件在預設時間段內始終空閑時,釋放所述資源文件存儲區(qū)。
[0097]根據(jù)本發(fā)明的一個實施方式,進程間通信單元501包括:
[0098]創(chuàng)建子單元,用于為所述多個進程創(chuàng)建一塊共享內存區(qū)域作為初始通信區(qū),并為所述初始通信區(qū)創(chuàng)建一個事件內核對象作為第一事件內核對象;
[0099]第一消息響應子單元,用于響應于所述第一事件內核對象的通知消息,從所述初始通信區(qū)中讀取所述多個進程的身份標識,所述第一事件內核對象的通知消息是所述多個進程中當前新加入的進程將自己的身份標識寫入到所述初始通信區(qū)中時觸發(fā)的;
[0100]第一分配子單元,用于根據(jù)讀取的所述多個進程中當前新加入的進程的身份標識為所述多個進程中當前新加入的進程分別分配一塊共享內存區(qū)域作為進程通信區(qū),并為所述進程通信區(qū)創(chuàng)建一個事件內核對象作為第二事件內核對象;
[0101]第一寫入子單元,用于將所述進程通信區(qū)的映射地址寫入到所述初始通信區(qū),并重置位于所述初始通信區(qū)的第一標志位,被重置的所述第一標志位用于指示所述多個進程中當前新加入的進程已經可以從所述初始通信區(qū)中讀取所述進程通信區(qū)的映射地址,以便基于所述進程通信區(qū)與所述多個進程中當前新加入的進程實現(xiàn)進程間通信。[0102]根據(jù)本發(fā)明的一個實施方式,資源文件確定單元502具體用于,響應于所述第二事件內核對象的通知消息,從所述進程通信區(qū)中讀取目標資源文件的路徑名,根據(jù)所述目標資源文件的路徑名確定所述多個進程中當前請求獲取資源文件的進程請求獲取的目標資源文件,所述第二事件內核對象的通知消息是所述多個進程中當前請求獲取資源文件的進程將所述目標資源文件的路徑名寫入到所述進程通信區(qū)中時觸發(fā)的。
[0103]根據(jù)本發(fā)明的一個實施方式,資源文件地址返回單元504具體用于,將所述資源文件描述區(qū)的映射地址寫入所述多個進程中當前請求獲取資源文件的進程的進程通信區(qū),并重置位于所述初始通信區(qū)的第二標志位,被重置的所述第二標志位用于指示所述多個進程中當前請求獲取資源文件的進程已經可以從自己的進程通信區(qū)中讀取所述資源文件描述區(qū)的映射地址。
[0104]根據(jù)本發(fā)明,由于為目標資源文件分配了一塊共享內存區(qū)域,而共享內存區(qū)域允許被同一個程序的多個進程訪問,因此,只需執(zhí)行一次將目標資源文件載入到共享內存區(qū)域的操作,而無需重復執(zhí)行將目標資源文件分別載入到多個進程各自的內存空間的操作。從而,當同一個程序的多個進程對資源文件的需求相同時,可以節(jié)約IO操作、CPU時間以及內存空間。
[0105]應當注意,盡管在上文詳細描述中提及了跨進程的資源共享設備的若干裝置或子裝置,但是這種劃分僅僅并非強制性的。實際上,根據(jù)本發(fā)明的實施方式,上文描述的兩個或更多裝置的特征和功能可以在一個裝置中具體化。反之,上文描述的一個裝置的特征和功能可以進一步劃分為由多個裝置來具體化。
[0106]此外,盡管在附圖中以特定順序描述了本發(fā)明方法的操作,但是,這并非要求或者暗示必須按照該特定順序來執(zhí)行這些操作,或是必須執(zhí)行全部所示的操作才能實現(xiàn)期望的結果。附加地或備選地,可以省略某些步驟,將多個步驟合并為一個步驟執(zhí)行,和/或將一個步驟分解為多個步驟執(zhí)行。
[0107]雖然已經參考若干【具體實施方式】描述了本發(fā)明的精神和原理,但是應該理解,本發(fā)明并不限于所公開的【具體實施方式】,對各方面的劃分也不意味著這些方面中的特征不能組合以進行受益,這種劃分僅是為了表述的方便。本發(fā)明旨在涵蓋所附權利要求的精神和范圍內所包括的各種修改和等同布置。
【權利要求】
1.一種方法,包括:與同一個程序的多個進程實現(xiàn)進程間通信;響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件;為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中;將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
2.根據(jù)權利要求1所述的方法,還包括:為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件描述區(qū),所述資源文件描述區(qū)中至少包含所述資源文件存儲區(qū)的映射地址;則所述將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程具體為:將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
3.根據(jù)權利要求2所述的方法,還包括:建立所述目標資源文件的路徑名與所述資源文件描述區(qū)的映射地址之間的對應關系,將建立的對應關系保存在預設列表中。
4.根據(jù)權利要求3所述的方法,在為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中之前,還包括:查詢在所述預設列表中是否存在所述目標資源文件的路徑名;則所述為所述目標資源文件分配一個共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中具體為:當在所述預設列表中不存在所述目標資源文件的路徑名時,為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中。
5.根據(jù)權利要求4所述的方法,還包括:當在所述預設列表中存在所述目標資源文件的路徑名時,直接從所述預設列表中讀取與所述目標資源文件的路徑名具有對應關系的所述資源文件描述區(qū)的映射地址。
6.根據(jù)權利要求1所述的方法,還包括: 定期檢查所述資源文件存儲區(qū)中的資源文件的占用狀況,當所述資源文件存儲區(qū)中的資源文件在預設時間段內始終空閑時,釋放所述資源文件存儲區(qū)。
7.根據(jù)權利要求1至6中任意一項所述的方法,其中,所述與同一個程序的多個進程實現(xiàn)進程間通信,包括:為所述多個進程創(chuàng)建一塊共享內存區(qū)域作為初始通信區(qū),并為所述初始通信區(qū)創(chuàng)建一個事件內核對象作為第一事件內核對象;響應于所述第一事件內核對象的通知消息,從所述初始通信區(qū)中讀取所述多個進程的身份標識,所述第一事件內核對象的通知消息是所述多個進程中當前新加入的進程將自己的身份標識寫入到所述初始通信區(qū)中時觸發(fā)的; 根據(jù)讀取的所述多個進程中當前新加入的進程的身份標識為所述多個進程中當前新加入的進程分別分配一塊共享內存區(qū)域作為進程通信區(qū),并為所述進程通信區(qū)創(chuàng)建一個事件內核對象作為第二事件內核對象;將所述進程通信區(qū)的映射地址寫入到所述初始通信區(qū),并重置位于所述初始通信區(qū)的第一標志位,被重置的所述第一標志位用于指示所述多個進程中當前新加入的進程已經可以從所述初始通信區(qū)中讀取所述進程通信區(qū)的映射地址,以便基于所述進程通信區(qū)與所述多個進程中當前新加入的進程實現(xiàn)進程間通信。
8.根據(jù)權利要求7所述的方法,其中,響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件具體為:響應于所述第二事件內核對象的通知消息,從所述進程通信區(qū)中讀取目標資源文件的路徑名,根據(jù)所述目標資源文件的路徑名確定所述多個進程中當前請求獲取資源文件的進程請求獲取的目標資源文件,所述第二事件內核對象的通知消息是所述多個進程中當前請求獲取資源文件的進程將所述目標資源文件的路徑名寫入到所述進程通信區(qū)中時觸發(fā)的。
9.根據(jù)權利要求7所述的方法,其中,將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程具體為:將所述資源文件描述區(qū)的映射地址寫入所述多個進程中當前請求獲取資源文件的進程的進程通信區(qū),并重置位于所述初始通信區(qū)的第二標志位,被重置的所述第二標志位用于指示所述多個進程中當前請求獲取資源文件的進程已經可以從自己的進程通信區(qū)中讀取所述資源文件描述區(qū)的映射地址。
10.一種設備,包括:進程間通信單元,用于與同一個程序的多個進程實現(xiàn)進程間通信;資源文件確定單元,用于響應于所述多個進程中當前請求獲取資源文件的進程的獲取請求,確定所述獲取請求所針對的目標資源文件;資源文件載入單元,用于為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中;資源文件地址返回單元,用于將所述資源文件存儲區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
11.根據(jù)權利要求10所述的設備,還包括:資源文件描述區(qū)分配單元,用于為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件描述區(qū),所述資源文件描述區(qū)中至少包含所述資源文件存儲區(qū)的映射地址;則所述資源文件地址返回單元具體用于,將所述資源文件描述區(qū)的映射地址返回給所述多個進程中當前請求獲取資源文件的進程。
12.根據(jù)權利要求11所述的設備,還包括:關系存儲單元,用于建立所述目標資源文件與所述資源文件描述區(qū)的映射地址之間的對應關系,將建立的對應關系保存在預設列表中。
13.根據(jù)權利要求12所述的設備,還包括:關系查詢單元,用于在所述資源文件載入單元為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中之前,查詢在所述預設列表中是否存在所述目標資源文件路徑名;則所述資源文件載入單元具體用于,當在所述預設列表中不存在所述目標資源文件的路徑名時,為所述目標資源文件分配一塊共享內存區(qū)域作為資源文件存儲區(qū),并將所述目標資源文件從物理磁盤載入到所述資源文件存儲區(qū)中。
14.根據(jù)權利要求13所述的設備,還包括:預設列表讀取單元,用于當在所述預設列表中存在所述目標資源文件的路徑名時,直接從所述預設列表中讀取與所述目標資源文件的路徑名具有對應關系的所述資源文件描述區(qū)的映射地址。
15.根據(jù)權利要求11至14中任意一項所述的設備,其中,所述進程間通信單元包括:創(chuàng)建子單元,用于為所述多個進程創(chuàng)建一塊共享內存區(qū)域作為初始通信區(qū),并為所述初始通信區(qū)創(chuàng)建一個事件內核對象作為第一事件內核對象;第一消息響應子單元,用于響應于所述第一事件內核對象的通知消息,從所述初始通信區(qū)中讀取所述多個進程的身份標識,所述第一事件內核對象的通知消息是所述多個進程中當前新加入的進程將自己的身份標識寫入到所述初始通信區(qū)中時觸發(fā)的;第一分配子單元,用于根據(jù)讀取的所述多個進程中當前新加入的進程的身份標識為所述多個進程中當前新加入的進程分別分配一塊共享內存區(qū)域作為進程通信區(qū),并為所述進程通信區(qū)創(chuàng)建一個事件內核對象作為第二事件內核對象;第一寫入子單元,用于將所述進程通信區(qū)的映射地址寫入到所述初始通信區(qū),并重置位于所述初始通信區(qū)的第一標志位,被重置的所述第一標志位用于指示所述多個進程中當前新加入的進程已經可以從所述 初始通信區(qū)中讀取所述進程通信區(qū)的映射地址,以便基于所述進程通信區(qū)與所述多個進程中當前新加入的進程實現(xiàn)進程間通信。
【文檔編號】G06F9/54GK103605577SQ201310648237
【公開日】2014年2月26日 申請日期:2013年12月4日 優(yōu)先權日:2013年12月4日
【發(fā)明者】吳國瑞, 吳海育 申請人:廣州博冠信息科技有限公司