Linux中LPC、RPC、IPC的區別


其實這玩意兒就是紙老虎,將英文縮寫翻譯為中文就明白一半了。

IPC:(Inter Process Communication )跨進程通信

這個概念泛指進程之間任何形式的通信行為,是個可以拿來到處套的術語。它不僅包括各種形式的消息傳遞,還可以指共享資源,以及同步對象[mutex 或者其他類似的東西,即確保安全的並發訪問共享資源(也就是防止兩個或兩個以上的對象同事對同一個數據成員進行修改,從而導致數據被破壞,或者競爭條件下同事讀/寫數據而導致錯誤的情況發生)]的東西。

LPC(Local Procedure Call)

LPC是“本地過程調用(Local Procedure Call)”的縮寫。所謂“本地過程調用”是與“遠程過程調用”即RPC相對而言的。RPC是廣義的,RPC可以發生在不同的主機之間,也可以發生在同一台主機上,發生在同一台主機上就是LPC。所以在Unix語境下就沒有LPC這一說,即使發生在同一台主機上也稱為RPC。

在歷史上,RPC是“開放軟件基金會(OSF)”設計和提出的一種用以實現“Unix分布計算環境(Unix DCE)”的標准。實際上,微軟的DCOM技術,就是建立在RPC基礎上的。Win2000的RPC可以采用TCP/IP、SPX、NetBIOS、命名管道、以及“本地”作為底層的通信手段,這“本地”就是LPC。

另一方面,Windows是一個帶有許多微內核系統特征的操作系統(盡管它的內核不是微內核),系統中有不少“系統級”的服務進程,例如大家已經熟知的csrss、管理用戶登錄的“本地安全認證服務”進程LSASS等等,用戶進程以及微軟提供的系統工具軟件經常需要調用由這些服務進程提供的服務,這里LPC就起着重要的作用。

LPC的基礎是一種稱為“端口(Port)”的進程間通信機制,類似於本地的(Unix域的)Socket。這種Port機制提供了面向報文傳遞(message passing)的進程間通信,而LPC則是建立在這個基礎上的高層機制,目的是提供跨進程的過程調用。注意這里所謂“跨進程的過程調用”不同於以前所說的“跨進程操作”。前者是雙方有約定、遵循一定規程的、有控制的服務提供,被調用者在向外提供一些什么服務、即提供哪些函數調用方面是自主的,而后者則可以是在不知不覺之間的被利用、被操縱。前者是良性的,而后者可以是惡性的。

RPC:(Reomote Procedure Call) 遠程過程調用

特指一種隱藏了過程調用時實際通信細節的IPC方法。客戶端將調用一個本地方法,而這個本地方法則是負責透明的與遠程服務端進行過程間通信。這個本地方法會講相關參數順序打包到一個消息中,然后把這個消息發送給服務端提供的方法,服務端的方法會從消息中解出序列化發出來的參數,然后執行,最后仍以同樣的方式將方法的返回值發送給客戶端。

區別

本地過程調用(LPC)LPC用在多任務操作系統中,使得同時運行的任務能互相會話。這些任務共享內存空間使任務同步和互相發送信息。遠程過程調用(RPC)RPC類似於LPC,只是在網上工作。RPC開始是出現在Sun微系統公司和HP公司的運行UNIX操作系統的計算機中。

通過IPC和RPC,程序能利用其它程序或計算機處理的進程。客戶機/服務器模式計算把遠程過 程調用與其它技術如消息傳遞一道,作為系統間通信的一種機制。

客戶機執行自己的任務,但靠服務器提供后端文件服務。RPC為客戶機提供向后端服務器申請服 務的通信機制,如圖R-4所示。如果你把客戶機/服務器應用程序想作是一個分離的程序,服務器能運行數據訪問部分,因為它離數據最近,客戶機能運行數據表 示和與用戶交互的前端部分。這樣,遠程過程調用可看作是把分割的程序通過網絡重組的部件。LPC有時也稱耦合(Coupling)機制。用這種方式分割程序,當用戶要訪問數據時就無需每次拷貝整個數據庫或它的大部分程序到用戶系統。其實,服務器只處理請求,甚至只執行一些數據計算,把得出的結果再發送給用戶。因為當數據存放在一個地方時,數據庫同步很容易實現,所以多個用戶可同時訪問相同的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM