當前位置:首頁 > 通信技術 > 通信技術
[導讀]進程間通信就是在不同進程之間傳播或交換信息,那么不同進程之間存在著什么雙方都可以訪問的介質呢?進程的用戶空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享內存區(qū)。

進程間通信就是在不同進程之間傳播或交換信息,那么不同進程之間存在著什么雙方都可以訪問的介質呢?進程的用戶空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享內存區(qū)。另外,系統(tǒng)空間是“公共場所”,各進程均可以訪問,所以內核也可以提供這樣的條件。此外,還有雙方都可以訪問的外設。在這個意義上,兩個進程當然也可以通過磁盤上的普通文件交換信息,或者通過“注冊表”或其它數據庫中的某些表項和記錄交換信息。廣義上這也是進程間通信的手段,但是一般都不把這算作“進程間通信”。

進程間通信(IPC,Interprocess communication)是一組編程接口,讓程序員能夠協(xié)調不同的進程,使之能在一個操作系統(tǒng)里同時運行,并相互傳遞、交換信息。這使得一個程序能夠在同一時間里處理許多用戶的要求。因為即使只有一個用戶發(fā)出要求,也可能導致一個操作系統(tǒng)中多個進程的運行,進程之間必須互相通話。IPC接口就提供了這種可能性。每個IPC方法均有它自己的優(yōu)點和局限性,一般,對于單個程序而言使用所有的IPC方法是不常見的。IPC方法包括管道(PIPE)、消息排隊、旗語、共用內存以及套接字(Socket)。

進程間通信的6種方式

1、管道:

1)管道傳輸數據是單向的,如果想相互通信,需要建立兩個管道。

2)管道這種通信方式效率低, 不適合進程間頻繁地交換數據。

3)優(yōu)點是簡單,很容易得知管道里的數據已經被另一個進程讀取了。

2、消息隊列:

1)消息隊列是保存在內核中的消息鏈表,AB進程互相發(fā)送消息,只要把數據放在消息隊列即可,之后進程遍可以正常返回,另一個進程會從消息隊列中讀取數據。

2)缺點:消息隊列通信過程中,存在用戶態(tài)與內核態(tài)之間的數據拷貝開銷。

3、共享內存:

1)操作系統(tǒng)對于內存管理,采用的是虛擬內存技術,也就是每個進程都有自己獨立的虛擬內存空間,不同進程的虛擬內存映射到不同的物理內存中。所以,即使進程A和 進程B的虛擬地址是一樣的,其實訪問的是不同的物理內存地址,對于數據的增刪查改互不影響。

2)共享內存的機制,就是拿出一塊虛擬地址空間來,映射到相同的物理內存中。這樣這個進程寫入的東西,另外一個進程馬上就能看到了,都不需要拷貝來拷貝去,傳來傳去, 大大提高了進程間通信的速度。

3)缺點:當多個進程向同一個共享內存中寫入數據時可能會產生覆蓋(如在工作中,當多人同時修改一份共享文檔時別人可能會將你添加的內容修改刪除或覆蓋),如果只讀則沒有任何問題。

4、信號量:

1)為了防止多進程競爭共享資源,而造成的數據錯亂,所以需要保護機制,使得共享的資源,在任意時刻只能被一個進程訪問。正好,信號量就實現了這一保護機制。

2)信號量其實是一個整型的計數器,主要用于實現進程間的互斥與同步。

3)信號量表示資源的數量,控制信號量的方式有兩種原子操作:

一個是P操作,這個操作會把信號量減去1,相減后如果信號量<0,則表明資源已被占用,進程需阻塞等待;相減后如果信號量>=0,則表明還有資源可使用,進程可正常繼續(xù)執(zhí)行。

另一個是V操作,這個操作會把信號量加上1,相加后如果信號量<=0,則表明當前有阻塞中的進程,于是會將該進程喚醒運行;相加后如果信號量>0,則表明當前沒有阻塞中的進程。

舉例說明:

A:如果要使得兩個進程互斥訪問共享內存,我們可以初始化信號量為1。

具體的過程如下:

進程A在訪問共享內存前,先執(zhí)行了P操作,由于信號量的初始值為1,故在進程A執(zhí)行P操作后信號量變?yōu)?,表示共享資源可用,于是進程A就可以訪問共享內存。

若此時,進程B也想訪問共享內存,執(zhí)行了P操作,結果信號量變?yōu)榱?1,這就意味著臨界資源已被占用ェ因此進程B被阻塞。

直到進程A訪問完共享內存,才會執(zhí)行V操作,使得信號量恢復為0,接著就會喚醒阻塞中的進程B,使得進程B可以訪問共享內存,最后完成共享內存的訪問后,執(zhí)行 V操作,使信號量恢復到初始值1。

可以發(fā)現,信號初始化為1,就代表著是互斥信號量,它可以保證共享內存在任何時刻只有一個進程在訪問,這就很好的保護了共享內存。

B:用信號量來實現多進程同步的方式,我們可以初始化信號量為0。

具體過程如下:

如果進程B比進程A先執(zhí)行了,那么執(zhí)行到P操作時,由于信號量初始值為0,故信號量會變?yōu)?1,表示進程 A 還沒生產數據,于是進程B就阻塞等待。

當進程A生產完數據后,執(zhí)行了V操作,就會使得信號量變?yōu)?,于是就會喚醒阻塞在P操作的進程B。

進程B被喚醒后,意味著進程A已經生產了數據,于是進程B就可以正常讀取數據了。

可以發(fā)現,信號初始化為0,就代表著是同步信號量,它可以保證進程A應在進程B之前執(zhí)行。

5、信號:

1)信號一般用于一些異常情況下的進程間通信,是一種異步通信,它的數據結構一般就是一個數字。

2)信號是進程間通信機制中唯一的異步通信機制。

3)進程需要為信號設置相應的監(jiān)聽處理,當收到特定信號時,執(zhí)行相應的操作,類似很多編程語言里的通知機制。

6、套接字:

1)前面提到的管道、消息隊列、共享內存、信號量和信號都是在同一臺主機上進行進程間通信,那要想跨網絡與不同主機上的進程之間通信,就需要Socket通信了。

2)Socket通信不僅可以跨網絡與不同主機的進程間通信,還可以在同主機上進程間通信。

系統(tǒng)IPC的三種方式類同,都是使用了內核里的標識符來識別.FAQ1: 管道與文件描述符,文件指針的關系?答: 其實管道的使用方法與文件類似,都能使用read,write,open等普通IO函數. 管道描述符來類似于文件描述符. 事實上, 管道使用的描述符,文件指針和文件描述符最終都會轉化成系統(tǒng)中SOCKET描述符. 都受到系統(tǒng)內核中SOCKET描述符的限制. 本質上LINUX內核源碼中管道是通過空文件來實現.FAQ2: 管道的使用方法?答: 主要有下面幾種方法: 1)pipe, 創(chuàng)建一個管道,返回2個管道描述符.通常用于父子進程之間通訊. 2)popen, pclose: 這種方式只返回一個管道描述符,常用于通信另一方是stdin or stdout; 3)mkpipe:命名管道, 在許多進程之間進行交互.FAQ3: 管道與系統(tǒng)IPC之間的優(yōu)劣比較?答: 管道: 優(yōu)點是所有的UNIX實現都支持, 并且在最后一個訪問管道的進程終止后,管道就被完全刪除;缺陷是管道只允許單向傳輸或者用于父子進程之間.系統(tǒng)IPC: 優(yōu)點是功能強大,能在毫不相關進程之間進行通訊; 缺陷是關鍵字KEY_T使用了內核標識,占用了內核資源,而且只能被顯式刪除,而且不能使用SOCKET的一些機制,例如select,epoll等.FAQ4: WINDOS進程間通信與LINUX進程間通信的關系?答: 事實上,WINDOS的進程通信大部分移植于UNIX, WINDOS的剪貼板,文件映射等都可從UNIX進程通信的共享存儲中找到影子.FAQ5: 進程間通信與線程間通信之間的關系?答: 因為WINDOWS運行的實體是線程, 狹義上的進程間通信其實是指分屬于不同進程的線程之間的通訊.而單個進程之間的線程同步問題可歸并為一種特殊的進程通信.它要用到內核支持的系統(tǒng)調用來保持線程之間同步. 通常用到的一些線程同步方法包括:Event, Mutex,信號量Semaphore,臨界區(qū)資源等.

IPC目的 播報1)數據傳輸:一個進程需要將它的數據發(fā)送給另一個進程,發(fā)送的數據量在一個字節(jié)到幾兆字節(jié)之間。2)共享數據:多個進程想要操作共享數據,一個進程對共享數據的修改,別的進程應該立刻看到。3)通知事件:一個進程需要向另一個或一組進程發(fā)送消息,通知它(它們)發(fā)生了某種事件(如進程終止時要通知父進程)。4)資源共享:多個進程之間共享同樣的資源。為了做到這一點,需要內核提供鎖和同步機制。5)進程控制:有些進程希望完全控制另一個進程的執(zhí)行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有陷入和異常,并能夠及時知道它的狀態(tài)改變。進程通過與內核及其它進程之間的互相通信來協(xié)調它們的行為。Linux支持多種進程間通信(IPC)機制,信號和管道是其中的兩種。除此之外,Linux還支持System V 的IPC機制(用首次出現的Unix版本命名)。

聲明:該篇文章為本站原創(chuàng),未經授權不予轉載,侵權必究。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉