進程間的通訊方式

    今天在學習com的時候,注意到一個知識點叫「進程間的通訊」。查閱了一些資料和書籍。和你們分享。編程

    進程通訊,指的是進程之間的信息交換。其交換信息量少者是一個狀態或者數值,多則是成千上萬個字節。好比,進程之間的互斥和同步,實際他們也確確實實是實現了進程之間的「通訊」,可是它們交換的信息量少而被歸爲「低級通訊」。他們通訊效率低,並且對用戶不透明(經過對比體會其含義)。使用起來很不方便。安全

    咱們主要來說一下高級的進程通訊。所謂高級,是用戶直接利用操做系統提供的方式去實現通訊。對用戶隱藏了細節。減小了編程的複雜性。這裏多說一句,不少東西,別人幫咱們作了,咱們要知道「別人幫咱們作了什麼」,「爲何要幫咱們作」,「大體是如何幫咱們作到的」這幾個問題,要爭取作個「明白人」。服務器

 

「高級」的進程通訊主要分爲三種:網絡

 

1.共享存儲器系統異步

    共享內存能夠說是最有用的進程間通訊方式,也是最 快的IPC(進程間通訊)形式。函數

    兩個不一樣進程A、B共享內存的意思是,同一塊物理內 存被映射到進程A、B各自的進程地址空間。進程A能夠 即時看到進程B對共享內存中數據的更新。學習

    此適用於須要傳輸大量數據的通訊。 spa

 

 

2.消息傳遞操作系統

    系統爲進程提供了兩個高級通信原語send和receive。3d

    在send源語中肯定哪一個進程接受消息是頗有必要的。有兩種方式:直接尋址和間接尋址

    2.1直接尋址:
      發送進程發消息時要指定接收進程的名字,反過來,接收時要指明發送進程的名字
      Send(receiver,message)
      Receiver(sender,message)

    2.2間接尋址

    發送進程發消息時不指定接收進程的名字,而是指定一箇中間媒介,即信箱或端口。進程間經過信箱或端口實現通訊。

    發送者和接收者之間的關係能夠是一對一,多對一,一對多或多對多。

    其中:多對一關係對客戶/服務器間的交互很是有用,一個進程給許多別的進程提供服務,這時信箱一般稱爲端口。(端口實際就是一個緩衝隊列)

   

   

     

3.管道通訊方式Pipe

      也稱共享文件方式,基於文件系統,利用一個打開的共享文件鏈接兩個相互通訊的進程,文件做爲緩衝傳輸介質

    •Windows中有命名管道和匿名管道
    •匿名管道只是在父子進程之間或者一個進程的兩個子進程之間進行通訊。它是單向的。
    •命名管道具備很好的使用靈活性,表如今:
  1) 既可用於本地,又可用於網絡。
  2) 能夠經過它的名稱而被引用。
  3) 支持多客戶機鏈接。
  4) 支持雙向通訊。
  5) 支持異步重疊I/O操做。

 

    匿名管道,它經過API函數CreatePipe建立。

    命名管道  它經過CreateNamedPipe建立一個命名管道

    BOOL CreatePipe(

    PHANDLE hReadPipe,     // 指向讀端句柄的指針

    PHANDLE hWritePipe,     // 指向寫端句柄的指針

    LPSECURITY_ATTRIBUTES lpPipeAttributes, // 指向安全屬性結構的指針

    DWORD nSize  );                                      // 管道的容量

相關文章
相關標籤/搜索