今天在學習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
也稱共享文件方式,基於文件系統,利用一個打開的共享文件鏈接兩個相互通訊的進程,文件做爲緩衝傳輸介質
匿名管道,它經過API函數CreatePipe建立。
命名管道 它經過CreateNamedPipe建立一個命名管道
BOOL CreatePipe(
PHANDLE hReadPipe, // 指向讀端句柄的指針
PHANDLE hWritePipe, // 指向寫端句柄的指針
LPSECURITY_ATTRIBUTES lpPipeAttributes, // 指向安全屬性結構的指針
DWORD nSize ); // 管道的容量