本發(fā)明涉及數(shù)據(jù)訪問技術(shù)領(lǐng)域,特別涉及一種生產(chǎn)者消費者模式優(yōu)化方法和系統(tǒng)。
背景技術(shù):
當(dāng)前,在生產(chǎn)者消費者模式中,生產(chǎn)者用于將消息放入緩沖區(qū),而消費者則用于從緩沖區(qū)中取出消息。也即,在生產(chǎn)者消費者模式中,生產(chǎn)者和消費者的數(shù)據(jù)訪問對象均是同一個緩沖區(qū)。生產(chǎn)者進(jìn)程和消費者進(jìn)程在對緩沖區(qū)進(jìn)行數(shù)據(jù)寫入操作或數(shù)據(jù)取出操作時,相應(yīng)的操作結(jié)果依賴于上述兩種進(jìn)程在執(zhí)行過程中的相對時間,也即依賴于上述兩個進(jìn)程的指令執(zhí)行順序,在這個過程中,很容易出現(xiàn)由于生產(chǎn)者進(jìn)程和消費者進(jìn)程對緩沖區(qū)中資源進(jìn)行爭奪而引發(fā)的數(shù)據(jù)訪問異?,F(xiàn)象。
綜上,如何避免生產(chǎn)者消費者模式中由于資源爭奪所導(dǎo)致的數(shù)據(jù)訪問異常現(xiàn)象是目前有待解決的問題。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種生產(chǎn)者消費者模式優(yōu)化方法和系統(tǒng),能夠避免生產(chǎn)者消費者模式中由于資源爭奪所導(dǎo)致的數(shù)據(jù)訪問異?,F(xiàn)象。其具體方案如下:
一種生產(chǎn)者消費者模式優(yōu)化方法,包括:
若生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),則確定當(dāng)前生產(chǎn)者進(jìn)程上是否擁有空消息緩沖單元,若當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元,則通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;
若消費者進(jìn)程嘗試取出數(shù)據(jù),則確定當(dāng)前消費者進(jìn)程上是否擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,若當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程;
其中,在初始化階段,通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程。
可選的,所述確定當(dāng)前生產(chǎn)者進(jìn)程上是否擁有消費者進(jìn)程發(fā)送的空消息緩沖單元的過程之后,還包括:
若當(dāng)前生產(chǎn)者進(jìn)程未擁有空消息緩沖單元,則控制生產(chǎn)者進(jìn)程進(jìn)入等待過程,以等待消費者進(jìn)程向生產(chǎn)者進(jìn)程傳遞空消息緩沖單元。
可選的,所述確定當(dāng)前消費者進(jìn)程上是否擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息的過程,包括:
若當(dāng)前消費者進(jìn)程未擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則控制消費者進(jìn)程進(jìn)入等待過程,以等待生產(chǎn)者進(jìn)程向消費者進(jìn)程發(fā)送數(shù)據(jù)消息。
本發(fā)明還相應(yīng)公開了一種生產(chǎn)者消費者模式優(yōu)化系統(tǒng),包括:
生產(chǎn)者管理模塊,用于當(dāng)生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),則確定當(dāng)前生產(chǎn)者進(jìn)程上是否擁有空消息緩沖單元,若當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元,則通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;
消費者管理模塊,用于當(dāng)消費者進(jìn)程嘗試取出數(shù)據(jù),則確定當(dāng)前消費者進(jìn)程上是否擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,若當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程;
其中,所述消費者管理模塊,還用于在初始化階段,通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程。
可選的,所述生產(chǎn)者管理模塊,還用于在生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù)的情況下,若當(dāng)前生產(chǎn)者進(jìn)程未擁有空消息緩沖單元,則控制生產(chǎn)者進(jìn)程進(jìn)入等待過程,以等待消費者進(jìn)程向生產(chǎn)者進(jìn)程傳遞空消息緩沖單元。
可選的,所述消費者管理模塊,還用于在消費者進(jìn)程嘗試取出數(shù)據(jù)的情況下,若當(dāng)前消費者進(jìn)程未擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則控制消費者進(jìn)程進(jìn)入等待過程,以等待生產(chǎn)者進(jìn)程向消費者進(jìn)程發(fā)送數(shù)據(jù)消息。
本發(fā)明中,生產(chǎn)者消費者模式優(yōu)化方法,包括:若生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),則確定當(dāng)前生產(chǎn)者進(jìn)程上是否擁有空消息緩沖單元,若當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元,則通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;若消費者進(jìn)程嘗試取出數(shù)據(jù),則確定當(dāng)前消費者進(jìn)程上是否擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,若當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程;其中,在初始化階段,通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程。
可見,本發(fā)明在初始化階段通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程,進(jìn)而在生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),并且當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元的情況下,通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;而在消費者進(jìn)程嘗試取出數(shù)據(jù),并且當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息的情況下,通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程,通過上述過程,能夠有效避免生產(chǎn)者消費者模式中由于資源爭奪所導(dǎo)致的數(shù)據(jù)訪問異?,F(xiàn)象。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種生產(chǎn)者消費者模式優(yōu)化方法流程圖;
圖2為本發(fā)明實施例公開的一種生產(chǎn)者消費者模式優(yōu)化系統(tǒng)結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種生產(chǎn)者消費者模式優(yōu)化方法,參見圖1所示,該方法包括:
步驟S11:若生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),則確定當(dāng)前生產(chǎn)者進(jìn)程上是否擁有空消息緩沖單元,若當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元,則通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;
步驟S12:若消費者進(jìn)程嘗試取出數(shù)據(jù),則確定當(dāng)前消費者進(jìn)程上是否擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,若當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程;
其中,在初始化階段,通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程。
需要說明的是,在初始化階段,上述目標(biāo)緩沖區(qū)中的全部消息緩沖單元均是空的,也即,假設(shè)上述目標(biāo)緩沖區(qū)中的消息緩沖單元的數(shù)量為N,則在初始化階段,目標(biāo)緩沖區(qū)中空消息緩沖單元的數(shù)量即為N??梢岳斫獾氖牵诒緦嵤├臄?shù)據(jù)讀寫過程中,空消息緩沖單元以及被寫入了數(shù)據(jù)的消息緩沖單元的數(shù)量之和是恒定的,等于N。
可見,本發(fā)明實施例在初始化階段通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程,進(jìn)而在生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),并且當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元的情況下,通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;而在消費者進(jìn)程嘗試取出數(shù)據(jù),并且當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息的情況下,通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程,通過上述過程,能夠有效避免生產(chǎn)者消費者模式中由于資源爭奪所導(dǎo)致的數(shù)據(jù)訪問異常現(xiàn)象。
本發(fā)明實施例公開了一種具體的生產(chǎn)者消費者模式優(yōu)化方法,相對于上一實施例,本實施例對技術(shù)方案作了進(jìn)一步的說明和優(yōu)化。具體的:
上一實施例步驟S11中,在生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù)的情況下,需要確定當(dāng)前生產(chǎn)者進(jìn)程上是否擁有空消息緩沖單元,其中,如果當(dāng)前生產(chǎn)者進(jìn)程未擁有空消息緩沖單元,則可以控制生產(chǎn)者進(jìn)程進(jìn)入等待過程,以等待消費者進(jìn)程向生產(chǎn)者進(jìn)程傳遞空消息緩沖單元??梢岳斫獾氖牵谏a(chǎn)者進(jìn)程進(jìn)入等待過程后,如果消費者進(jìn)程向生產(chǎn)者進(jìn)程傳遞了空消息緩沖單元,則可結(jié)束生產(chǎn)者進(jìn)程的等待過程,并允許生產(chǎn)者進(jìn)程寫入新數(shù)據(jù)。
另外,上一實施例步驟S12中,在消費者進(jìn)程嘗試取出數(shù)據(jù)的情況下,需要確定當(dāng)前消費者進(jìn)程上是否擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,其中,如果當(dāng)前消費者進(jìn)程未擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則可以控制消費者進(jìn)程進(jìn)入等待過程,以等待生產(chǎn)者進(jìn)程向消費者進(jìn)程發(fā)送數(shù)據(jù)消息??梢岳斫獾氖牵谙M者進(jìn)程進(jìn)入等待過程后,如果生產(chǎn)者進(jìn)程向消費者進(jìn)程發(fā)送了數(shù)據(jù)消息,則可結(jié)束消費者進(jìn)程的等待過程,并允許消費者進(jìn)程取出數(shù)據(jù)。
相應(yīng)的,本發(fā)明實施例還公開了一種生產(chǎn)者消費者模式優(yōu)化系統(tǒng),參見圖2所示,該系統(tǒng)包括:
生產(chǎn)者管理模塊11,用于當(dāng)生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),則確定當(dāng)前生產(chǎn)者進(jìn)程上是否擁有空消息緩沖單元,若當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元,則通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;
消費者管理模塊12,用于當(dāng)消費者進(jìn)程嘗試取出數(shù)據(jù),則確定當(dāng)前消費者進(jìn)程上是否擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,若當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程;
其中,上述消費者管理模塊12,還用于在初始化階段,通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程。
需要說明的是,在初始化階段,上述目標(biāo)緩沖區(qū)中的全部消息緩沖單元均是空的,也即,假設(shè)上述目標(biāo)緩沖區(qū)中的消息緩沖單元的數(shù)量為N,則在初始化階段,目標(biāo)緩沖區(qū)中空消息緩沖單元的數(shù)量即為N。可以理解的是,在本實施例的數(shù)據(jù)讀寫過程中,空消息緩沖單元以及被寫入了數(shù)據(jù)的消息緩沖單元的數(shù)量之和是恒定的,等于N。
進(jìn)一步的,本實施例中,上述生產(chǎn)者管理模塊,還可以用于在生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù)的情況下,若當(dāng)前生產(chǎn)者進(jìn)程未擁有空消息緩沖單元,則控制生產(chǎn)者進(jìn)程進(jìn)入等待過程,以等待消費者進(jìn)程向生產(chǎn)者進(jìn)程傳遞空消息緩沖單元??梢岳斫獾氖牵谏a(chǎn)者進(jìn)程進(jìn)入等待過程后,如果消費者進(jìn)程向生產(chǎn)者進(jìn)程傳遞了空消息緩沖單元,則可結(jié)束生產(chǎn)者進(jìn)程的等待過程,并允許生產(chǎn)者進(jìn)程寫入新數(shù)據(jù)。
進(jìn)一步的,本實施例中,上述消費者管理模塊,還可以用于在消費者進(jìn)程嘗試取出數(shù)據(jù)的情況下,若當(dāng)前消費者進(jìn)程未擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息,則控制消費者進(jìn)程進(jìn)入等待過程,以等待生產(chǎn)者進(jìn)程向消費者進(jìn)程發(fā)送數(shù)據(jù)消息??梢岳斫獾氖牵谙M者進(jìn)程進(jìn)入等待過程后,如果生產(chǎn)者進(jìn)程向消費者進(jìn)程發(fā)送了數(shù)據(jù)消息,則可結(jié)束消費者進(jìn)程的等待過程,并允許消費者進(jìn)程取出數(shù)據(jù)。
可見,本發(fā)明實施例在初始化階段通過消費者進(jìn)程將目標(biāo)緩沖區(qū)中的所有空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程,進(jìn)而在生產(chǎn)者進(jìn)程嘗試寫入新數(shù)據(jù),并且當(dāng)前生產(chǎn)者進(jìn)程擁有空消息緩沖單元的情況下,通過生產(chǎn)者進(jìn)程向空消息緩沖單元中寫入新數(shù)據(jù),得到相應(yīng)的數(shù)據(jù)消息,并將得到的數(shù)據(jù)消息發(fā)送至消費者進(jìn)程;而在消費者進(jìn)程嘗試取出數(shù)據(jù),并且當(dāng)前消費者進(jìn)程擁有生產(chǎn)者進(jìn)程發(fā)送的數(shù)據(jù)消息的情況下,通過消費者進(jìn)程從數(shù)據(jù)消息中提取出相應(yīng)的數(shù)據(jù),并得到相應(yīng)的空消息緩沖單元,然后將得到的空消息緩沖單元傳遞至生產(chǎn)者進(jìn)程,通過上述過程,能夠有效避免生產(chǎn)者消費者模式中由于資源爭奪所導(dǎo)致的數(shù)據(jù)訪問異?,F(xiàn)象。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上對本發(fā)明所提供的一種生產(chǎn)者消費者模式優(yōu)化方法和系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。