新聞中心
Windows下進(jìn)程間通訊的幾個(gè)比較?
1 進(jìn)程與進(jìn)程通信

進(jìn)程是裝入內(nèi)存并準(zhǔn)備執(zhí)行的程序,每個(gè)進(jìn)程都有私有的虛擬地址空間,由代碼、數(shù)據(jù)以及它可利用的系統(tǒng)資源(如文件、管道等)組成。多進(jìn)程/多線(xiàn)程是Windows操作系統(tǒng)的一個(gè)基本特征。Microsoft Win32應(yīng)用編程接口(Application Programming Interface, API)提供了大量支持應(yīng)用程序間數(shù)據(jù)共享和交換的機(jī)制,這些機(jī)制行使的活動(dòng)稱(chēng)為進(jìn)程間通信(InterProcess Communication, IPC),進(jìn)程通信就是指不同進(jìn)程間進(jìn)行數(shù)據(jù)共享和數(shù)據(jù)交換。
正因?yàn)槭褂肳in32 API進(jìn)行進(jìn)程通信方式有多種,如何選擇恰當(dāng)?shù)耐ㄐ欧绞骄统蔀閼?yīng)用開(kāi)發(fā)中的一個(gè)重要問(wèn)題,下面本文將對(duì)Win32中進(jìn)程通信的幾種方法加以分析和比較。
2 進(jìn)程通信方法
2.1 文件映射
文件映射(Memory-Mapped Files)能使進(jìn)程把文件內(nèi)容當(dāng)作進(jìn)程地址區(qū)間一塊內(nèi)存那樣來(lái)對(duì)待。因此,進(jìn)程不必使用文件I/O操作,只需簡(jiǎn)單的指針操作就可讀取和修改文件的內(nèi)容。
Win32 API允許多個(gè)進(jìn)程訪(fǎng)問(wèn)同一文件映射對(duì)象,各個(gè)進(jìn)程在它自己的地址空間里接收內(nèi)存的指針。通過(guò)使用這些指針,不同進(jìn)程就可以讀或修改文件的內(nèi)容,實(shí)現(xiàn)了對(duì)文件中數(shù)據(jù)的共享。
應(yīng)用程序有三種方法來(lái)使多個(gè)進(jìn)程共享一個(gè)文件映射對(duì)象。
(1)繼承:第一個(gè)進(jìn)程建立文件映射對(duì)象,它的子進(jìn)程繼承該對(duì)象的句柄。
(2)命名文件映射:第一個(gè)進(jìn)程在建立文件映射對(duì)象時(shí)可以給該對(duì)象指定一個(gè)名字(可與文件名不同)。第二個(gè)進(jìn)程可通過(guò)這個(gè)名字打開(kāi)此文件映射對(duì)象。另外,第一個(gè)進(jìn)程也可以通過(guò)一些其它IPC機(jī)制(有名管道、郵件槽等)把名字傳給第二個(gè)進(jìn)程。
線(xiàn)程間通信有哪些方式?
多線(xiàn)程通信的方法主要有以下三種:
1.全局變量
進(jìn)程中的線(xiàn)程間內(nèi)存共享,這是比較常用的通信方式和交互方式。
注:定義全局變量時(shí)最好使用volatile來(lái)定義,以防編譯器對(duì)此變量進(jìn)行優(yōu)化。
2.Message
常用的Message通信的接口主要有兩個(gè):PostMessage和PostThreadMessage,
PostMessage為線(xiàn)程向主窗口發(fā)送消息。而PostThreadMessage是任意兩個(gè)線(xiàn)程之間的通信接口。
多個(gè)客戶(hù)端能共享一個(gè)socket嗎?
在常見(jiàn)的網(wǎng)絡(luò)編程中,多個(gè)客戶(hù)端可以共享一個(gè)服務(wù)器端的套接字(socket),但是多個(gè)客戶(hù)端之間通常無(wú)法共享同一個(gè)客戶(hù)端套接字。
當(dāng)使用套接字編程時(shí),服務(wù)器端套接字是用于監(jiān)聽(tīng)和接受連接請(qǐng)求的,一旦服務(wù)器接受了客戶(hù)端的連接請(qǐng)求,就會(huì)創(chuàng)建一個(gè)新的套接字來(lái)處理該客戶(hù)端的通信。這個(gè)新創(chuàng)建的套接字是專(zhuān)門(mén)為該客戶(hù)端服務(wù)的,并與該客戶(hù)端建立了一對(duì)一的通信通道。
對(duì)于多個(gè)客戶(hù)端,服務(wù)器端可以通過(guò)多線(xiàn)程、多進(jìn)程或異步編程等方式,為每個(gè)客戶(hù)端請(qǐng)求創(chuàng)建一個(gè)獨(dú)立的套接字,從而實(shí)現(xiàn)多客戶(hù)端的并發(fā)通信。
然而,多個(gè)客戶(hù)端之間通常無(wú)法共享同一個(gè)客戶(hù)端套接字。每個(gè)客戶(hù)端都會(huì)與服務(wù)器端建立自己獨(dú)立的連接,并使用自己的套接字進(jìn)行通信。這是因?yàn)樘捉幼质且粋€(gè)端到端的通信通道,每個(gè)客戶(hù)端與服務(wù)器之間的通信需要通過(guò)各自的套接字來(lái)進(jìn)行。
需要注意的是,雖然多個(gè)客戶(hù)端無(wú)法直接共享同一個(gè)客戶(hù)端套接字,但可以共享服務(wù)器端的資源和服務(wù)。服務(wù)器端可以維護(hù)一些共享的狀態(tài)或數(shù)據(jù),以供多個(gè)客戶(hù)端訪(fǎng)問(wèn)和操作。
到此,以上就是小編對(duì)于的問(wèn)題就介紹到這了,希望這3點(diǎn)解答對(duì)大家有用。
新聞名稱(chēng):Windows下進(jìn)程間通訊的幾個(gè)比較?進(jìn)程線(xiàn)程共享windows代碼
當(dāng)前URL:http://fisionsoft.com.cn/article/cciccso.html


咨詢(xún)
建站咨詢(xún)
