【系統(tǒng)架構(gòu)設(shè)計(jì)師】共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換

【系統(tǒng)架構(gòu)設(shè)計(jì)師】共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換

ID:37726548

大?。?4.50 KB

頁數(shù):4頁

時(shí)間:2019-05-29

【系統(tǒng)架構(gòu)設(shè)計(jì)師】共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換_第1頁
【系統(tǒng)架構(gòu)設(shè)計(jì)師】共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換_第2頁
【系統(tǒng)架構(gòu)設(shè)計(jì)師】共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換_第3頁
【系統(tǒng)架構(gòu)設(shè)計(jì)師】共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換_第4頁
資源描述:

《【系統(tǒng)架構(gòu)設(shè)計(jì)師】共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、共享內(nèi)存實(shí)現(xiàn)進(jìn)程間大數(shù)據(jù)的交換  引言  進(jìn)程間的數(shù)據(jù)交換和共享是一種非常重要和實(shí)用的技術(shù)。大、中型軟件的開發(fā)設(shè)計(jì)多是由眾多程序設(shè)計(jì)人員的合作完成,通常一個(gè)程序設(shè)計(jì)人員只負(fù)責(zé)其中一個(gè)或幾個(gè)模塊的開發(fā),這些模塊可以是動態(tài)鏈接庫也可以是應(yīng)用程序或是其他形式的程序組件。這些獨(dú)立開發(fā)出來的程序模塊最終需要作為一個(gè)整體來運(yùn)行,即組成一個(gè)系統(tǒng),在系統(tǒng)運(yùn)行期間這些模塊往往需要頻繁地進(jìn)行數(shù)據(jù)交換和數(shù)據(jù)共享,對于動態(tài)鏈接庫同其主調(diào)應(yīng)用程序之間的數(shù)據(jù)交換是非常容易實(shí)現(xiàn)的,但是在兩個(gè)應(yīng)用程序之間或是動態(tài)鏈接庫同其主調(diào)應(yīng)用程序之外的其他應(yīng)用

2、程序進(jìn)行數(shù)據(jù)交換就比較困難了。尤其是在交換數(shù)據(jù)量過大、交換過于頻繁的情況下更是難以實(shí)現(xiàn),本文即對此展開討論,并提出了一種通過共享內(nèi)存來實(shí)現(xiàn)進(jìn)程見大數(shù)據(jù)量快速交換的一種方法。  通訊方式的比較和選擇  進(jìn)程間通訊的方式有很多,常用的有共享內(nèi)存、命名管道和匿名管道、發(fā)送消息等幾種方法來直接完成,另外還可以通過socket口、配置文件和注冊表等來間接實(shí)現(xiàn)進(jìn)程間數(shù)據(jù)通訊任務(wù)。以上這幾種方法各有優(yōu)缺點(diǎn),具體到在進(jìn)程間進(jìn)行大數(shù)據(jù)量數(shù)據(jù)的快速交換問題上,則可以排除使用配置文件和注冊表的方法;另外,由于管道和socket套接字的使用

3、需要有網(wǎng)卡的支持,因此也可以不予考慮。這樣,可供選擇的通訊方式只剩下共享內(nèi)存和發(fā)送消息兩種。由于數(shù)據(jù)量比較大,這樣在使用消息進(jìn)行通訊時(shí)就無法通過消息參數(shù)將數(shù)據(jù)直接攜帶到接收方,只能以地址傳送的方式進(jìn)行。當(dāng)一個(gè)應(yīng)用程序向另一個(gè)應(yīng)用程序發(fā)送數(shù)據(jù)時(shí)將會發(fā)出WM_COPYDATA系統(tǒng)消息,因此可以考慮通過向消息隊(duì)列插入WM_COPYDATA消息的方法來實(shí)現(xiàn)數(shù)據(jù)在進(jìn)程間的拷貝?! ≡谑褂肳M_COPYDATA消息時(shí),由第一個(gè)消息參數(shù)指定發(fā)送窗口的句柄,第二個(gè)消息參數(shù)則為一同數(shù)據(jù)相關(guān)的數(shù)據(jù)結(jié)構(gòu)COPYDATASTRUCT的指針,

4、此結(jié)構(gòu)原形聲明如下:  typedefstructtagCOPYDATASTRUCT{  DWORDdwData;  DWORDcbData;  PVOIDlpData;  }COPYDATASTRUCT;  其中,只需將待發(fā)送數(shù)據(jù)的首地址賦予lpData、并由cbData指明數(shù)據(jù)塊長度即可。消息發(fā)出后,接收方程序在WM_COPYDATA消息的響應(yīng)函數(shù)中通過隨消息傳遞進(jìn)來的第二個(gè)參數(shù)完成對數(shù)據(jù)塊的接收。但是在使用WM_COPYDATA消息時(shí),只能用SendMessage()函數(shù)發(fā)送而不能使用PostMessage()

5、,這兩個(gè)函數(shù)雖然功能非常相似都是負(fù)責(zé)向指定的窗口發(fā)送消息,但是SendMessage()函數(shù)發(fā)出消息后不是馬上返回,而是在接收方的消息響應(yīng)函數(shù)處理完之后才能返回,并能夠得到返回結(jié)果。在此期間發(fā)送方程序?qū)⒈蛔枞?,SendMessage()后面的語句不能被繼續(xù)執(zhí)行。而PostMessage()函數(shù)在發(fā)出消息后馬上返回,其后語句能夠被立即執(zhí)行,但是無法獲取消息的執(zhí)行結(jié)果。可見,在交換數(shù)據(jù)量較大的情況下實(shí)現(xiàn)數(shù)據(jù)頻繁而又快速的交換用發(fā)送WM_COPYDATA消息的方法也是不合適的,當(dāng)數(shù)據(jù)傳輸過于頻繁時(shí)將有可能導(dǎo)致數(shù)據(jù)的丟失。 

6、 比之以上幾種進(jìn)程間通訊方法,共享內(nèi)存有著明顯的優(yōu)勢。共享內(nèi)存是通過直接操作內(nèi)存映射文件來進(jìn)行的,而內(nèi)存映射文件又是進(jìn)行單機(jī)數(shù)據(jù)共享的最低層機(jī)制,前面幾種數(shù)據(jù)交換方式在低層都是通過內(nèi)存映射文件來進(jìn)行的。因此使用共享內(nèi)存可以以較小的開銷獲取較高的性能,是進(jìn)行大數(shù)據(jù)量數(shù)據(jù)快速交換的最佳方案?! 」蚕韮?nèi)存的使用  在Windows操作系統(tǒng)下,任何一個(gè)進(jìn)程不允許讀取、寫入或是修改另一個(gè)進(jìn)程的數(shù)據(jù)(包括變量、對象和內(nèi)存分配等),但是在某個(gè)進(jìn)程內(nèi)創(chuàng)建的文件映射對象的視圖卻能夠?yàn)槎鄠€(gè)其他進(jìn)程所映射,這些進(jìn)程共享的是物理存儲器的同一

7、個(gè)頁面。因此,當(dāng)一個(gè)進(jìn)程將數(shù)據(jù)寫入此共享文件映射對象的視圖時(shí),其他進(jìn)程可以立即獲取數(shù)據(jù)變更情況。為了進(jìn)一步提高數(shù)據(jù)交換的速度,還可以采用由系統(tǒng)頁文件支持的內(nèi)存映射文件而直接在內(nèi)存區(qū)域使用,顯然這種共享內(nèi)存的方式是完全可以滿足在進(jìn)程間進(jìn)行大數(shù)據(jù)量數(shù)據(jù)快速傳輸任務(wù)要求的。下面給出在兩個(gè)相互獨(dú)立的進(jìn)程間通過文件映射對象來分配和訪問同一個(gè)共享內(nèi)存塊的應(yīng)用實(shí)例。在本例中,由發(fā)送方程序負(fù)責(zé)向接收方程序發(fā)送數(shù)據(jù),文件映射對象由發(fā)送方創(chuàng)建和關(guān)閉,并且指定一個(gè)唯一的名字供接收程序使用。接收方程序直接通過這個(gè)唯一指定的名字打開此文件映射

8、對象,并完成對數(shù)據(jù)的接收?! ≡诎l(fā)送方程序中,首先通過CreateFileMapping()函數(shù)創(chuàng)建一個(gè)內(nèi)存映射文件對象,如果創(chuàng)建成功則通過MapViewOfFile()函數(shù)將此文件映射對象的視圖映射進(jìn)地址空間,同時(shí)得到此映射視圖的首址??梢?,共享內(nèi)存的創(chuàng)建主要是通過這兩個(gè)函數(shù)完成的。這兩個(gè)函數(shù)原形聲明如下:  HANDLECreateFile

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。